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