0

我有一个 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");

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

4

2 回答 2

0

AuthHeader用属性[DataContract]和字段标记你的类[DataMember]

于 2012-07-24T14:02:56.407 回答
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>
于 2018-12-19T06:11:46.143 回答