我正在使用以下代码添加WCF自定义标头
MessageHeader header = MessageHeader.CreateHeader("Key", "ns", "Value");
OperationContext.Current.OutgoingMessageHeaders.Add(header);
有了这个我还想添加
xmlns:wsa="http://www.w3.org/2005/08/addressing"
wsa:IsReferenceParameter="1"
作为此Message标头的属性。
有没有办法将上面的命名空间和属性添加到邮件头?
答案 0 :(得分:7)
我找到了解决方案。 我们必须实现从MessageHeader类中隐藏的custome头。
MessageHeader类确实有方法OnWriteStartHeader()
。我们可以在这个方法中添加xml命名空间。
此外,我们必须覆盖OnWriteHeaderContents()方法,并将我们想要的xml或值写为MessageHeader。
准备就绪后,在request.Header.Add()中添加邮件头,并传递自定义标题类的对象。
请参阅以下链接了解更多详情。
http://social.msdn.microsoft.com/forums/en-US/wcf/thread/c2a39df8-3943-4c41-acca-6da8e96f0dff
答案 1 :(得分:0)
定义一个XmlSerializable类,该类序列化为标题所需的XML元素格式。然后将此类的实例作为value
的{{1}}参数传递。
答案 2 :(得分:0)
如果使用AddressHeader类,它会自动添加isReferenceParameter属性。 ChannelFactory的以下扩展方法可以满足您的需求。
public static void AddHeader<T>(this ChannelFactory<T> factory, string headerName, string value, string nameSpace)
{
var endpointAddressBuilder = new EndpointAddressBuilder(factory.Endpoint.Address);
endpointAddressBuilder.Headers.Add(AddressHeader.CreateAddressHeader(headerName, nameSpace, value));
factory.Endpoint.Address = endpointAddressBuilder.ToEndpointAddress();
}