C# 将WCF与负载平衡(AWS)一起使用时,安全上下文令牌无效
我有一个托管在AWS上的WCF应用程序。为了获得更高的可用性,我创建了一个WCF机器的快照,并使用此映像启动了另一个实例 此外,我还创建了一个弹性负载平衡(ELB),将请求路由到这两台服务器 使用我的WCF客户端,如果我使用机器的公共IP地址,我可以成功地连接两台服务器但是如果我使用ELB主机名,我的连接将失败,并出现以下错误: System.ServiceModel.FaultException:无法发送消息 处理。这很可能是因为 “”不正确或是因为 消息包含无效或过期的安全上下文令牌或 因为绑定之间存在不匹配。安全背景 如果服务由于以下原因中止了通道,则令牌将无效 不活动。防止服务中止空闲会话的步骤 过早增加服务端点上的接收超时 绑定 该错误表明我的安全令牌无效或已过期。因此,我已经检查了发送和接收超时,它已经设置为10分钟:C# 将WCF与负载平衡(AWS)一起使用时,安全上下文令牌无效,c#,wcf,amazon-web-services,load-balancing,C#,Wcf,Amazon Web Services,Load Balancing,我有一个托管在AWS上的WCF应用程序。为了获得更高的可用性,我创建了一个WCF机器的快照,并使用此映像启动了另一个实例 此外,我还创建了一个弹性负载平衡(ELB),将请求路由到这两台服务器 使用我的WCF客户端,如果我使用机器的公共IP地址,我可以成功地连接两台服务器但是如果我使用ELB主机名,我的连接将失败,并出现以下错误: System.ServiceModel.FaultException:无法发送消息 处理。这很可能是因为 “”不正确或是因为 消息包含无效或过期的安全上下文令牌或 因为
sendTimeout=“00:10:00”
,receiveTimeout=“00:10:00”
(请求通常需要5-15秒)
我的投标配置:
此外,我还仔细检查了:
- ELB和计算机防火墙在端口80和443上打开
- 我的ELB配置了正确的证书,并且在端口443上有一个侦听器
- 我在两台机器上都有一个IIS Web服务器。如果我使用ELB地址,一切正常
- 如果ELB路由到一台机器,则WCF工作。如果路由到两台机器,WCF将失败
但是,当您指定客户端凭据时,WCF需要传输安全性,因此如果需要发送客户端凭据,您可能必须关闭SSL卸载。我已通过添加以下参数成功解决了此问题:
establishSecurityContext=“false”
谷歌,我学到了:
当此值设置为false时,每次调用都必须使用非对称加密进行密钥交换和验证。此参数的默认值为true,这意味着第一次调用将使用非对称加密创建安全上下文,但它将被缓存,并且进一步调用将仅使用对称加密,这会更快
业绩考虑:
当客户端需要连续进行多次调用时,最好将此参数设置为true,但在负载平衡的情况下,调用被路由到不同的服务器,这会由于无效令牌而中断消息。因此,必须禁用此安全上下文功能
建立安全上下文部分的详细说明:谢谢dan,但我没有使用SSL卸载。我的客户端、服务器和ELB仅使用HTTPS。我已经设法找到了解决方案,它与安全上下文有关。我已经把答案贴在这里了。