Soapヘッダーを使用したエラー処理
-
04-07-2019 - |
質問
新しいウェブサービスを開発しており、「ベストプラクティス」を検討しています。 soap応答でエラーを返すため。
すべての応答がプロパティとして含まれるエラー応答オブジェクトの作成を検討していました。しかし、これは少し重いようで、SOAPヘッダーを使用してこの情報を伝達できるかどうか疑問に思っていますか?通常、SOAPを使用してカスタムエラーをどのように処理しますか?
解決
SOAPFaultはエラーおよびステータス情報を保持するために使用され、サーバーはHTTPヘッダーで500を返し、フォールトとしてそれを示します。
W3.orgの仕様を参照
http://www.w3.org/TR/ 2000 / NOTE-SOAP-20000508 /#_ Toc478383507
サードパーティ向けに明確に文書化する限り、SOAPヘッダーに入れるか、返される結果の要素内に入れることで、独自の情報トークンを設計できます。ただし、これはエラーを発生させる標準的な方法ではありません。
他のヒント
Soapは既にエラー情報にカスタムヘッダーを使用しているため、サーバー側で例外をスローするだけで、クライアント側で SoapException 。
例外メッセージ/情報をさらに制御したい場合は、サーバーサイドでSoapExceptionをスローできます。
編集: リクエストと一緒に追加情報を取得するには、カスタムSOAPヘッダーを使用できます。以下は、認証にカスタムSOAPヘッダーを使用した CodeProjectのサンプル記事です。 soapヘッダーは、必ずしもエラー状態ではない追加の情報(ビジネスロジック情報の場合もあります)の送信など、他の目的に使用できます
これまで、複雑な操作に対して同様の手法を使用してきました。特に(複数?)エラーの説明とエラーコードが必要な場合。
SOAPヘッダーは帯域外情報用であり、エラーメッセージには使用しないでください。さらに、SOAP応答でSOAPヘッダーを使用しないでください:
- mustUnderstandが存在しないか0の場合、クライアントはそれらを安全に無視できます。
- mustUnderstandが1の場合、クライアントは(応答であるため)理解できないことを通知できません。
そして、はい、いくつかのWS- *標準は応答でsoapヘッダーを記述していることを知っています...
だから、
応答オブジェクトが存在しないほど深刻なエラーには、soapフォールトを使用します。 警告および情報メッセージの応答にステータストークンを追加します。