【问题标题】:WCF through ARR: Disappearing cookieWCF 通过 ARR:消失的 cookie
【发布时间】:2015-09-07 11:45:10
【问题描述】:

在 Windows 2012 上使用 ARR 和 IIS 将 WCF 服务库部署到新的 webfarm 后,我遇到了一些问题。

尝试使用 wcftestclient 调用方法时,我得到“安全上下文令牌已过期或无效。消息未处理。”

我在配置文件中启用了 cookie。 查看wireshark中的流量,我看到的是这样的:

-> POST, SOAP
<- Set-Cookie: ARRAffinity=..., SOAP
-> POST, Cookie: ARRAffinity=..., SOAP
<- SOAP
-> POST, Cookie: ARRAffinity=..., SOAP
<- SOAP
-> POST, SOAP (no cookie)
<- SOAP (500)

从wireshark转储,内容被剥离:https://ghostbin.com/paste/mshuk

查看 splunk 中的日志,我发现最终 POST 被定向到与之前不同的场服务器,从而使安全上下文无效。

【问题讨论】:

  • 您找到解决方案了吗?发送
  • 很遗憾,没有。我最终为我的 WCF 服务提供了一个专用主​​机。

标签: wcf cookies load-balancing arr


【解决方案1】:

这并不能真正解决您的问题,但我希望它能帮助人们。

由于我找不到处理 ARR cookie 的正确方法,我将问题转向另一个方向:如何使 WCF 完全无状态,以便每次调用都可以在任何服务器上进行,所以我们不再关心关于 ARR cookie。

在 WCF 方面非常简单:在绑定上设置 EstablishSecurityContext = false。

在代码中:

binding.Security.Message.EstablishSecurityContext = false;

在xml中:

<binding name="SecureBindingBigSize">
  <security mode="TransportWithMessageCredential">
    <message establishSecurityContext="false" clientCredentialType="UserName"/>
  </security>
</binding>

当然,您的应用程序必须与此行为兼容(= 不使用会话)。

关于信息,我的 WsHttpBinding 正在使用 https 和 TransportWithMessageCredential 安全性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多