WCF请求中缺少消息头值

时间:2012-07-24 13:58:08

标签: c# wcf

我有一个WCF服务,我在其中包含供应商凭据的自定义消息标题。我创建了一个名为'AuthHeader'的类,它继承自SoapHeader,并添加了用户名和密码的属性。

public class AuthHeader : SoapHeader
{
    public string Username;
    public string Password;
}

我在客户端使用以下代码添加标题:

 OperationContext.Current.OutgoingMessageHeaders.Add(
    MessageHeader.CreateHeader("Identity", 
                               "http://www.my-website.com",
                               new AuthHeader
                                   {
                                       Username = "UserNameValue",
                                       Password = "PasswordValue"
                                   }
                              ));

然后我尝试使用以下方法检索服务中的标头:

var result = OperationContext.Current.IncomingMessageHeaders.GetHeader<AuthHeader>("Identity", "http://www.my-website.com");

虽然此代码找到标头,但它不会正确反序列化值,而是结果对象上的Username和Password为null。知道为什么没有设置这些属性值吗?

2 个答案:

答案 0 :(得分:0)

使用属性AuthHeader和字段[DataContract]

标记您的班级[DataMember]

答案 1 :(得分:0)

这是Fiddler跟踪的调用。可能会对您有帮助。

<s:Header><SecurityHeader xmlns="http://tempuri.org" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Channel xmlns="http://schemas.datacontract.org/2004/07/CustomMessageHeader">ChannelName</Channel><Password xmlns="http://schemas.datacontract.org/2004/07/CustomMessageHeader">Password</Password><UserName xmlns="http://schemas.datacontract.org/2004/07/CustomMessageHeader">username</UserName></SecurityHeader></s:Header><s:Body><GetLookUp xmlns="http://tempuri.org/"><categoryType>GRIEVANCE_TYPE</categoryType></GetLookUp></s:Body>