基本的wcf消息合同肥皂头问题

时间:2011-01-18 22:23:27

标签: wcf soap

我有以下操作合同方法:

[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头读取器/写入。

1 个答案:

答案 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
}