1

着信 SOAP メッセージの wsdl に特定のカスタム ヘッダーを追加したいので、以下のように必要なタグを web.config のヘッダー ノードに追加しました。

 <headers>
   <Tag>Value</Tag>
 </headers>

ただし、カスタムタグの「値」が「値」に設定されている場合、この値を変更するとサービスがキックアウトして以下のエラーが発生する場合、これは正常に機能します。

「DestinationUnreachable - 宛先が「http://localhost:3537/Service1.svc」のメッセージは、EndpointDispatcher での AddressFilter の不一致により、受信側で処理できません。送信者と受信者の EndpointAddresses が一致していることを確認してください。

では、タグ間の実際の値に変数値を指定するにはどうすればよいでしょうか?? URLテンプレートのように

 <headers>
   <Tag>{variable value here}</Tag>
 </headers>

任意のアイデア、またはカスタム ヘッダーについて間違った方法で行っていますか? ドキュメント スタイルよりも RPC スタイルの SOAP を使用しているため、messageContract は使用したくありません。

また、別の興味深いことは、ヘッダー要素で定義されたカスタムがメッセージを有効にするために、 ws-addressing 名前空間で 'IsReferenceParameter="true"' 属性を指定する必要があることです。そうしないと、上記のエラーがスローされますか?

 <Tag a:IsReferenceParameter="true">Value</Tag>

誰かが私にこれを説明できますか?

前もって感謝します

ジョン

4

1 に答える 1

2

あなたが持っている具体的な質問を実際に説明することはできませんが、通常は、web.config からではなく、動作を使用して、コードで WCF 呼び出しにカスタム ヘッダーを追加します。それが実際に機能するかどうかはわかりません。

もちろん、カスタム ヘッダーの動作でできることは、構成ファイルやデータベース テーブルなどから送信される値を読み取ることです。

しかし、本当にメッセージに SOAP ヘッダーを適用したい場合は、メッセージ コントラクトを使用するのが最善の策だと思います。メッセージ コントラクトを使用できない、または使用したくないのはなぜですか?? メッセージ コントラクトの実際の目的は、カスタム ヘッダーを含む明示的な SOAP メッセージ レイアウトを定義することだけです。

このトピックに関するいくつかの記事とブログ投稿を参照してください。

このブログ記事では、カスタム "WsdlExporter" クラスを実装することによって生成される WSDL にカスタム SOAP ヘッダーを挿入する方法を示しています。

グーグルで検索すれば、さらに多くのリソースを利用できます - これは非常に一般的なシナリオであり、多くの人がすでに多くの方法で実装し、いくつかの独創的なソリューションを提供しており、それについてブログを書いています - すべてを見つけるのに問題はありません。そこに答えがあります!

マルク

于 2009-08-07T20:24:58.270 に答える