我有以下操作合同方法:
[OperationContract]
MyOutputMessageType DeleteVRequest(DeleteVRequest type);
[MessageContract]
public class DeleteVRequest
{
[MessageHeader(Name = "UserId")]
public Guid UserId;
[MessageHeader(Name = "Password")]
public String Password;
[MessageHeader(Name = "Version")]
public String Version;
[MessageBodyMember]
public Guid Id;
}
[MessageContract]
public class MyOutputMessageType
{
[MessageBodyMember]
public string Response;
}
我的问题是如何为客户端的呼叫设置合约的soap标头值(userid,密码,版本)?如果我在outgoingmessageheaders上使用Add写一个标题值,它似乎不会映射到messagecontract中的值。因此,例如,如果我向标头添加UserId值,它似乎在DeleteVRequest方法中看不到。
感谢您的帮助,我一直在努力使用SOAP中的SOAP头读取器/写入。
答案 0 :(得分:1)
如果客户端使用.NET,则服务代理将接收消息合同而不是数据合同,您可以像设置任何其他属性一样设置标头属性。
否则,您可以使用OperationContextScope手动设置标题值:
using(OperationContextScope context = new OperationContextScope(proxy.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("HeaderName", "HeaderNamespace", "SomeValue"));
//Make your proxy calls here
}