1

WCFサービスにSOAPリクエストを送信しようとしています。System.ServiceModel.Channels.Message.CreateMessage()メソッドを使用してsoapリクエストを作成しています。

私は体を作ることにそれほど深くは入っていませんが、これが私が持っているものです...

Message msg = Message.CreateMessage( MessageVersion.Soap11WSAddressing10, "MethodName" );
msg.Headers.MessageId = new UniqueId( Guid.NewGuid().ToString() );
msg.Headers.Add( Message.CreateHeader( "Security", "",
    new Security()
    {
        TimeStamp = new TimeStampType() {
            Created = DateTime.Now,
            Expires = Created.AddDays( 1 )
        },
        UsernameToken = new UsernameToken() {
            Username = "stackoverflow",
            Password = new Password() {
                Type = "hashed",
                Value = "Password"
            }
        }
     }, new SecuritySerializer() ) ) ); // The serializer inherits XmlObjectSerializer. Internally it is using the XmlSerializer class.

string s = msg.ToString();

これを実行すると、次の出力が得られます。ところで、私はVisual StudioXMLVisualizerを使用しています。

<s:Envelope>
    <s:Header>
        <Action>MethodName</Action>
        <MessageID>GUIDVALUE</MessageID>
        <Security>
            <Security>
               .....
            </Security>
        </Security>
    </s:Header>
    <s:Body />
</s:Envelope>

私の質問は、セキュリティ要素の1つを削除するにはどうすればよいですか?1つあるはずですが、最初に要素名をMessage.CreateHeader()メソッドに渡し、2つ目はシリアライザーから生成されたため、2つあります。

前もって感謝します

4

1 に答える 1

1

これを修正するには、SecurityクラスをMessageHeader抽象クラスから継承します。次に、OnWriteHeaderContentsメソッドをオーバーライドし、そこでプロパティをシリアル化しました。また、Securityオブジェクトがヘッダーオブジェクトになっているため、MessageHeader.CreateHeader()を削除しました。

于 2012-08-20T17:50:28.553 に答える