我试图在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“用户名”。有人能指出我在这里做错了吗?
答案 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
变量。在这种情况下,您必须明确键入变量。