WCF到ARR:消失的cookie

时间:2015-06-22 05:55:40

标签: wcf cookies load-balancing arr

在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被定向到与之前的服务器不同的服务器场服务器,使安全上下文无效。

1 个答案:

答案 0 :(得分: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安全性。