2

この件については他にも質問がありますが、この正確な問題を実際にカバーしているものはありません。たいてい答えを見つけられるので、私はめったに質問しません。

Soap 1.1 を使用する Java Web サービスと通信するために、WCF クライアントを使用しています。userNameToken を追加するには、カスタム WseHttpBinding を作成する必要がありました。問題は、リクエストがシリアル化されるときに、Java サービスが嫌う多数のヘッダー要素が追加されることです。これらは具体的には次のとおりです。

アクション MessageID ReplyTo To To

実際のヘッダーは次のようになります。

 <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
 <s:Header>
 <a:Action s:mustUnderstand="1"/>
 <a:MessageID>urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx</a:MessageID>
 <a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo>
 <a:To s:mustUnderstand="1">https://xxx.xxx.xxx</a:To>

 <MORE SECURITY ELEMENTS...>
 </s:Header>

オプションを調査した後、カスタム エンコーダーを記述したり、送信前にメッセージを操作したりせずにそれらを削除する方法を見つけることができませんでした。私は後者を選びました。

カスタム動作を使用して、IClientMessageInspector を使用して messageInspector クラスを実装しました。BeforeSendRequest メソッドでは、次を使用しました。

message.Headers.RemoveAll("Action", "http://schemas.xmlsoap.org/ws/2004/08/addressing");
message.Headers.RemoveAll("MessageID","http://schemas.xmlsoap.org/ws/2004/08/addressing");
message.Headers.RemoveAll("ReplyTo", "http://schemas.xmlsoap.org/ws/2004/08/addressing");
message.Headers.RemoveAll("To", "http://schemas.xmlsoap.org/ws/2004/08/addressing");

1つのヘッダー例外がすべて削除されたことに非常に驚きました。結果は次のとおりです。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:To s:mustUnderstand="1">https://pilot.eidverifier.com/uru/soap/ut/usv3</a:To>
<MORE SECURITY ELEMENTS...>
</s:Header>

ご覧のとおり、'To' 要素がまだ残っています。それで、私の質問はなぜですか?メッセージを送信するためにそれが必要ですか?

私はこれに間違った方法でアプローチしていると感じずにはいられません。mustUnderstand を false にする方法はありますか? 余分な要素をすべて削除するプロパティ設定はありますか? 私は解放モードです。

どんな助けや指示も大歓迎です。

4

2 に答える 2

2

あなたは間違ったを使用していますmessageVersion

削除するには、Soap11代わりに使用しますSoap11WSAddressing10

于 2014-03-08T11:24:10.083 に答える
0

私はWCFコアでまったく同じ問題を抱えていました

TextMessageEncodingBindingElement encodingElement = new TextMessageEncodingBindingElement(MessageVersion.Soap12WSAddressing10, System.Text.Encoding.UTF8);

に切り替えることで解決

MessageVersion msgver = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None);
TextMessageEncodingBindingElement encodingElement = new TextMessageEncodingBindingElement(msgver, System.Text.Encoding.UTF8);
于 2021-10-28T21:14:38.330 に答える