1

我正在尝试向 WCF 服务发送一个肥皂请求。我正在使用 System.ServiceModel.Channels.Message.CreateMessage() 方法构建肥皂请求。

我还没有深入到构建身体,但这就是我所拥有的......

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 Studio XML Visualizer 顺便说一句。

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

我的问题是,我怎样才能删除安全元素之一?我应该有一个,但我有两个,因为我第一次将元素名称传递给 Message.CreateHeader() 方法,第二个是从序列化程序生成的。

提前致谢

4

1 回答 1

1

我通过使 Security 类继承自 MessageHeader 抽象类来解决此问题。然后我重写了 OnWriteHeaderContents 方法并在那里序列化了属性。我还取出了 MessageHeader.CreateHeader() 因为 Security 对象现在是一个标头对象。

于 2012-08-20T17:50:28.553 回答