C# 在生成自定义soap请求时复制安全元素
我正在尝试向WCF服务发送soap请求。我正在使用System.ServiceModel.Channels.Message.CreateMessage()方法构建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
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)的操作