Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在生成自定义soap请求时复制安全元素_C#_Wcf_Serialization_Soap_Xml Serialization - Fatal编程技术网

C# 在生成自定义soap请求时复制安全元素

C# 在生成自定义soap请求时复制安全元素,c#,wcf,serialization,soap,xml-serialization,C#,Wcf,Serialization,Soap,Xml Serialization,我正在尝试向WCF服务发送soap请求。我正在使用System.ServiceModel.Channels.Message.CreateMessage()方法构建soap请求 我还没有深入到身体的构建中,但这里是我所拥有的 Message msg = Message.CreateMessage( MessageVersion.Soap11WSAddressing10, "MethodName" ); msg.Headers.MessageId = new UniqueId( Guid.NewGu

我正在尝试向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();
当我运行它时,我得到以下输出。顺便说一句,我正在使用VisualStudioXML可视化工具

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

方法名
导向值
.....
我的问题是,如何删除其中一个安全元素?我应该有一个,但自从我第一次将元素名传递给Message.CreateHeader()方法以来,我有两个,第二个是从序列化程序生成的


提前感谢

我通过让安全类从MessageHeader抽象类继承来解决这个问题。然后我重写了OnWriteHeaderContents方法并序列化了那里的属性。我还取出了MessageHeader.CreateHeader(),因为安全对象现在是header对象。

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

如果需要名称空间前缀,则需要重写OnWriteStartHeader方法,并执行类似writer.WriteStarteElement(“prefix”,this.Name,this.namespace)的操作,如果需要名称空间前缀,您需要重写OnWriteStartHeader方法,并执行类似writer.WriteStartElement(“前缀”、this.Name、this.Namespace)的操作