何をしたいのか
Webサービスに<WebMethod>
の関数を作成して、SOAPを使って通信します。
例外が発生したらSoapExceptionとやらを返却します。
実際にWebサービスではそういう感じで、
'実際のパラメータは違う型です
Throw New SoapException("Message", "Code", "Actor", "Detail")
みたいに書きました。
何が起きたのか
SoapException
でCatchしようとしたらCatchできませんで、一体何が……と思ったらFaultException
とかいう例外が返ってきてました。
なるほど道理でCatchできないわけですね。
型が違うもんね。
なんでだよ。
と自分に突っ込むのも虚しく、調査のための検索結果はそれ以上に寂しいものでした。
SOAP、情報がない……いくらなんでもなさすぎる……
探すのが下手なだけかも知れませんがそれは下手っぴにとっては情報がないのと同義です。
なければ編み出せばいいじゃないってマリーも言ってるから編み出してみました。
ここまでが前振りです。
茶番にお付き合いいただきありがとうございます。
取得方法
まず、なんでSoapExceptionが変換されるのかという理由はわかりません。
おしえてください
ちなみに今回おしごとでこういうことをしてる(人に聞けないのでマリーの言う通り編み出してる)んですが、既存の他のクライアントを流用して通信したところSoapExceptionがちゃんと受け取れたので、呼び出し元の問題というのは間違いなさそうです。
さらに編み出そうとしてる通信方法はSoapExceptionを受け取るのがメインではなく、設定値がちゃんと連携されていることがわかればよい状況でした。
というわけで設定値さえ拾えれば問題ない……そんな感じのニッチな話なのですが、肝心の拾う方法が検索しても出てこず、総当たり的に探し出す羽目になったので記録に残しておきます。
Soap設定値 | Fault格納場所 |
---|---|
Message | ex.Message |
Code | ex.Code.Name ServerかClientが入る。 |
Actor | ex.CreateMessageFault.Actor |
Detail | ex.CreateMessageFault.GetReaderAtDetailContents.Value 設定側で detail= に入れた値が取れる。 |
どっとはらい。