SOAP非同期通信のキャンセルについて - Printable Version +- Curl Global Community (https://communities.curl.com) +-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1) +--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2) +--- Thread: SOAP非同期通信のキャンセルについて (/showthread.php?tid=225) |
SOAP非同期通信のキャンセルについて - onyo - 08-22-2011 こんばんは。度々古いVerの話で申し訳ないのですが COM.CURL.WSDK1.0 を使用した非同期通信 キャンセルの実装について SOAP通信のRead時に SOAPHTTPRPCPostCaller の async-call メソッドを使用し ResponseをRead中 待ちうけイベントの SOAPHTTPRPCPostAsyncWorker cancel メソッドを使用すると SOAPHTTPRPCPostCaller IOException[HTTPAsyncWinInetBufferedByteInputStream @0x0D1AAC04]がオープンされていません。 が発生する事象が起きております。 Response が返却される前の キャンセルは Post→Close で正常キャンセルが可能です。 当方でもオープンソースを、追ってはいるのですが、 このエラーを回避または、ハンドリングしたいと思っておりますが 該当箇所がどの辺りになるのか、ご教授願えませんでしょうか。 RE: SOAP非同期通信のキャンセルについて - hokada - 08-22-2011 onyoさん WSDKには詳しくないので参考になるかどうかわかりませんし、想像での回答ですが、 このエラー内容からは、非同期処理が開始して、AsyncWorker (ここではそのサブクラスのSOAPHTTPRPCPostAsyncWorker)が生成されているようですが、 取得すべきInputStreamは、まだオープンされていないので、IOExceptionが発生しているように見受けられますね。 原因を探るのに、soap/SOAPHTTP.scurlファイルのSOAPHTTPRPCPostAsyncWorker.cancelメソッドの最初の行でbreakpointを付ければ、デバッグが早いかと思います。 もしくは、パニックレポート(=スタックトレース)を見てみると、WSDK内のどこで落ちているかわかると思います。 RE: SOAP非同期通信のキャンセルについて - onyo - 08-22-2011 hokada 様 ご返信ありがとうございます。 前者の cancel メソッドで止める手法は メソッド内でステップ実行している最中にReadが終わってしまいそうです。 WSDLをパッケージとして使用してましたので コールスタックでも追えず、困っておりました。 オープンソースでのDebugを試みるという、初歩的なことを忘れていました。。。 IOException自体をcatchさえできれば、握りつぶしても、 仕様的には問題ない(Readを受取らなくてもよい)ので、 どこで落ちてるのか探ってみます。 ありがとうございました。 RE: SOAP非同期通信のキャンセルについて - hokada - 08-22-2011 > WSDLをパッケージとして使用してましたので > コールスタックでも追えず、困っておりました。 確かにそうですね・・・。 > WSDLをパッケージとして使用してましたので > コールスタックでも追えず、困っておりました。 恐らくpcurlをお使いいただいていると思うので、現在はpcurlへのマニフェストファイルにdelegate-toしているところ変更して、ソースコードを見るようにすれば、デバッグできると思います。 RE: SOAP非同期通信のキャンセルについて - onyo - 08-23-2011 COM.CURL.WSDK.1.0 で非同期通信キャンセルを実装するような 方は今現在いないでしょうが・・・ 最新の WSDK+UTIL-V7_090925 でも同じ実装でしたので、 結果を報告までに。 COM.CURL.WSDK.SOAP SOAPHTTP.scurl 内 SOAPHTTPRPCPostAsyncWorker の cancel メソッド が Code: {method public open {cancel}:bool となっていましたが、 {self.close} の位置が、{async-worker.cancel} の前であるため、イベント内でRead中に落ちるようです。 Code: {method public open {cancel}:bool と改修してみると、落ちなくなりました。 ご回答くれた皆様有難う御座いました。 |