通过 netTcpBinding 在 WCF 上传递消息 headers
Pass message headers on WCF via netTcpBinding
在我头撞了一天之后,我正在寻求帮助。我在同一台机器上有一个带有 WCF 服务托管的 Web 窗体应用程序。 WCF 服务的方法具有某种自定义权限(例如,只有 "admin" 可以为用户设置密码)。
Web 表单应用程序使用表单身份验证,因此我 HttpContext.Current.User
具有此应用程序所具有的所有角色。所以我使用 AuthCookie
通过 HttpRequestMessageProperty
传递 object 并像这样阅读它:
HttpRequestMessageProperty property =
OperationContext.Current.IncomingMessageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
使用 basicHttpBinding
效果很好。但后来我需要实施 net.tcp 协议,因此 HttpRequestMessageProperty
不再起作用。我试图通过 MessageHeader
添加它,但这也不起作用。
OperationContext.Current.IncomingMessageProperties
有 none 我的 headers...
那么如何将用户角色列表传递到我的 WCF?我正在像这样使用 Windows 安全性,但我需要从 HttpContext.Current.User
:
传递角色
<netTcpBinding>
<binding transactionFlow="True">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
好的,我找到了转移角色信息的工作方式。虽然还不清楚为什么标准方法对我不起作用,但这里是正确的方法(感谢 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 表示 "namespace")
在我头撞了一天之后,我正在寻求帮助。我在同一台机器上有一个带有 WCF 服务托管的 Web 窗体应用程序。 WCF 服务的方法具有某种自定义权限(例如,只有 "admin" 可以为用户设置密码)。
Web 表单应用程序使用表单身份验证,因此我 HttpContext.Current.User
具有此应用程序所具有的所有角色。所以我使用 AuthCookie
通过 HttpRequestMessageProperty
传递 object 并像这样阅读它:
HttpRequestMessageProperty property =
OperationContext.Current.IncomingMessageProperties[HttpRequestMessageProperty.Name] as HttpRequestMessageProperty;
使用 basicHttpBinding
效果很好。但后来我需要实施 net.tcp 协议,因此 HttpRequestMessageProperty
不再起作用。我试图通过 MessageHeader
添加它,但这也不起作用。
OperationContext.Current.IncomingMessageProperties
有 none 我的 headers...
那么如何将用户角色列表传递到我的 WCF?我正在像这样使用 Windows 安全性,但我需要从 HttpContext.Current.User
:
<netTcpBinding>
<binding transactionFlow="True">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</netTcpBinding>
好的,我找到了转移角色信息的工作方式。虽然还不清楚为什么标准方法对我不起作用,但这里是正确的方法(感谢 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 表示 "namespace")