【发布时间】:2014-10-17 08:09:48
【问题描述】:
我有一个托管在 AWS 上的 WCF 应用程序。为了获得更高的可用性,我创建了 WCF 机器的快照并使用此映像启动了另一个实例。
另外,我创建了一个弹性负载平衡 (ELB),将请求路由到这 2 个服务器。
使用我的 WCF 客户端,如果我使用机器的公共 IP 地址,我可以成功连接两台服务器。 但如果我使用 ELB 主机名,我的连接会失败并出现以下错误:
System.ServiceModel.FaultException:消息无法 处理。这很可能是因为该操作 'http://tempuri.org/IService/GetCustomerData' 不正确或因为 消息包含无效或过期的安全上下文令牌或 因为绑定之间存在不匹配。安全上下文 如果服务因以下原因中止通道,则令牌将无效 不活动。防止服务中止空闲会话 过早地增加服务端点的接收超时 绑定。
该错误表明我的安全令牌无效或过期。所以,我检查了发送和接收超时,它已经设置为 10 分钟:sendTimeout="00:10:00",receiveTimeout="00:10:00"
(请求通常需要 5-15 秒)
我的出价配置:
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" useDefaultWebProxy="true">
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Basic"/>
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
另外,我已经仔细检查了:
- ELB 和机器防火墙在端口 80 和 443 上打开。
- 我的 ELB 配置了正确的证书,并且在端口 443 上有一个侦听器。
- 我在两台机器上都有一个 IIS Web 服务器。如果我使用 ELB 地址,一切正常。
- 如果 ELB 路由到一台机器,WCF 工作。如果路由到两台机器,WCF 会失败。
【问题讨论】:
标签: c# wcf amazon-web-services load-balancing