.NET で使用する WCF サービスがあります。サービスが要求を認識して応答するには、ヘッダーの Action 要素が「http://abc」で、To 要素が「ws://xyz」である必要があります。ただし、操作の soapAction は WSDL では空白であり、変更できません。
プログラムで構築された私のサービス構成は次のとおりです。
- Soap11 エンベロープ バージョンと WSAddressing10 アドレッシング バージョンを使用したテキスト メッセージ エンコーディング バインディング
- 担保入札なし
- http トランスポート バインディング
この要件を達成するために私が見つけたセットアップは、エンドポイント URL として「ws://xyz」であり、エンドポイントにアタッチされたエンドポイント動作を使用して追加されたメッセージ インスペクターを使用して、BeforeSendRequest で Request.Headers.Action を「http://abc」に設定します。次に、「http://abc」の URL を持つ ClientViaBehavior も添付します。
私の開発マシンでは、これは必要に応じて発生します
<a:Action>http://abc</a:Action>
<a:To>ws://xyz</a:To>
ただし、テストサーバーでは生成されます
<a:Action>http://abc</a:Action>
<a:To>http://xyz</a:To>
サーバーの正確な構成はわかりませんが、開発ボックスと同様に Windows サーバーだと思います。同じコードが 2 つの異なるマシンで異なるメッセージを生成しますか、それともどうすればこれを達成できますか? また、数週間は問題なく機能し、先週の月曜日に停止したと言わざるを得ません。
後で次のことがわかりました。テスト サーバーには .NET 4.5 があり、それを試した別のマシンもありました (これも失敗しました)。正常に動作する開発マシンには.NET 4.0が搭載されているだけで、何か関係がある可能性があることが示唆されます。ただし、問題が発生する数週間前に .NET 4.5 がインストールされたため、.NET 4.5 が原因であるという証拠はありません。さらに、動作を停止して以来、Windows の更新はありません。また、ClientMessageInspector 実装で To 要素を設定しようとしましたが、プロトコルはまだ http に変換されます。