在我敲了一天之后,我正在寻求帮助。我有一个Web窗体应用程序与WCF服务托管在同一台机器上。 WCF服务具有某种自定义权限的方法(例如,只有“admin”可以为用户设置密码)。
Web表单应用程序使用表单身份验证,因此我HttpContext.Current.User
具有此使用的所有角色。所以我使用AuthCookie
通过HttpRequestMessageProperty
传递对象并按如下方式读取:
HttpRequestMessageProperty property =
OperationContext.Current.IncomingMessageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
basicHttpBinding
工作正常。但后来我需要实现net.tcp协议,因此HttpRequestMessageProperty
不再起作用了。我试图通过MessageHeader
添加它,但这也不起作用。
OperationContext.Current.IncomingMessageProperties
没有我的标题......
那么如何将用户角色列表传递给我的WCF?我正在使用像这样的Windows安全性,但我需要从HttpContext.Current.User
传递角色:
<netTcpBinding>
<binding transactionFlow="True">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
答案 0 :(得分:1)
好的,所以我找到了转移角色信息的工作方式。虽然目前还不清楚为什么标准方法对我来说不合适,但这是正确的(感谢Guy Burstein):
客户端:
MessageHeader<string> header = new MessageHeader<string>(roleData);
MessageHeader untypedHeader = header.GetUntypedHeader(ProjectParam.Role, "justASampleNamespace");
OperationContext.Current.OutgoingMessageHeaders.Add(untypedHeader);
WCF:
string roles = OperationContext.Current.IncomingMessageHeaders.GetHeader<string>(ProjectParam.Role, "justASampleNamespace");
if(roles.Contains(ProjectParam.AdminLoginID))
{
//Now business logic comes
}
ProjectParam.Role
只是一个用于密钥的内部常量,第二个参数是一个示例字符串(MSDN表示&#34;命名空间&#34;)