代码之家  ›  专栏  ›  技术社区  ›  fbhdev

生成自定义soap请求时存在重复的安全元素

  •  1
  • fbhdev  · 技术社区  · 13 年前

    我正在尝试向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 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()方法,第二个是从序列化程序生成的。

    提前感谢

    1 回复  |  直到 11 年前
        1
  •  1
  •   fbhdev    13 年前

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

    推荐文章