我有一个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。知道为什么没有设置这些属性值吗?
答案 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>