WCF错误 - 无法接收客户端添加的MessageHeaders

时间:2011-04-19 06:42:54

标签: c# wcf

我试图在WCF中使用这个简单的代码:

客户端:

ServiceContractClient proxy = new ServiceContractClient();
using (OperationContextScope scope = new OperationContextScope((IContextChannel)proxy.InnerChannel))
        {
            MessageHeaders messageHeadersElement = OperationContext.Current.OutgoingMessageHeaders;
            messageHeadersElement.Add(MessageHeader.CreateHeader("username", String.Empty, System.Security.Principal.WindowsIdentity.GetCurrent().Name)); 
        }
var res = proxy.CallWCFMethod();

服务器端:

CallWCFMethod实现了另一个方法GetInfo()。 GetInfo()的代码是:

MessageHeaders messageHeadersElement = OperationContext.Current.IncomingMessageHeaders;            
        int AdidIndex = messageHeadersElement.FindHeader("username", string.Empty);
        string ticket = messageHeadersElement.GetHeader<string>("username", string.Empty);

但是这段代码永远找不到我在客户端添加的Header“用户名”。有人能指出我在这里做错了吗?

1 个答案:

答案 0 :(得分:5)

您的OperationContextScope范围太小。在 proxy.CallWCFMethod()之后放置右括号,它应该有效:

ServiceContractClient proxy = new ServiceContractClient();
using (OperationContextScope scope = new OperationContextScope((IContextChannel)proxy.InnerChannel))
{
    MessageHeaders messageHeadersElement = OperationContext.Current.OutgoingMessageHeaders;
    messageHeadersElement.Add(MessageHeader.CreateHeader("username", String.Empty,
        System.Security.Principal.WindowsIdentity.GetCurrent().Name)); 
    var res = proxy.CallWCFMethod();
}

您可能需要重新编译代码,因为您需要在res范围之外声明using变量。在这种情况下,您必须明确键入变量。