http.sys を使用して、独自に開発した例外を Soap 経由でクライアントに送信することはできますか??
3 に答える
私の知る限り、残念ながら答えはノーです。サーバー側で独自のカスタム例外を構築し、WSE を介してクライアント側でそれらを使用することを期待することはできません。その理由について技術的な背景を説明することはできませんが (なぜこれが WSE で許可されていないのかなど)、私はこれをテストしたので、私の答えには確信があります。
提供されたリンクで説明されているアプローチを使用して、System.Web.Services.Protocols.SoapException から継承するカスタム例外を返すことができますが、キャプチャできないため、クライアント側で例外を SoapException としてキャプチャする必要があります。カスタム例外タイプとして: http://msdn.microsoft.com/en-us/library/ms229064.aspx
独自の確認のためにテストを再作成するには、次の手順を実行します。
- テスト例外クラスを作成し、好きなように呼び出して、上記のリンクで説明されているパターンに従っていることを確認します (コード サンプルが提供されています)。
次のように、テスト例外を明示的に返す Web メソッドを作成します。
'This is in VB.Net <WebMethod()> _ Public Function ThrowTestSoapException() As TestSoapException Return New TestSoapException() End Function
クライアントの WSE ライブラリを (WseWsdl3.exe を使用して) 再生成しようとすると、次のようなエラー メッセージが表示されます。「エラー: サーバーを利用できません。後で試してください」
これは、独自の転送可能なカスタム例外を作成しようとしたときに得られる限りです。ここでも、SoapException クラスから継承されたカスタム例外を返し、それをクライアント側で SoapException としてキャッチすることしかできませんでした。これは、「CheGueVerra」が上記で指摘したリンクに記載されているのと同じ方法です。
上記の John Saunders のコメントに応えて: はい、可能であればWCFに移行してください。WSE は確かに時代遅れです。これは私にとっても、これらの質問をしている他の人にとっても仕事に関連しているため、WSE から WCF に移行するには管理者の承認が必要です。
はい、独自の例外をスローできます。SoapException から派生していないキャッチされない例外は、.NET フレームワークによって SoapException に詰め込まれます。SoapException の特定の部分 (たとえば、フォルト部分と詳細部分) の形成方法を制御する場合は、SoapException から派生させることができます。
ベースとなる ASMX サービスと同様に、WSE は SOAP フォールトをほとんどサポートしていません。それらを返すことはできますが (Detail プロパティが設定された SoapException)、WSDL には表示されません。WSE クライアントによって受信された場合、カスタム例外タイプとしてではなく、SoapException として表示されます。
WCF は、クライアント側とサーバー側の両方で SOAP エラーを完全にサポートしています。