Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将WCF与负载平衡(AWS)一起使用时,安全上下文令牌无效_C#_Wcf_Amazon Web Services_Load Balancing - Fatal编程技术网

C# 将WCF与负载平衡(AWS)一起使用时,安全上下文令牌无效

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:无法发送消息 处理。这很可能是因为 “”不正确或是因为 消息包含无效或过期的安全上下文令牌或 因为

我有一个托管在AWS上的WCF应用程序。为了获得更高的可用性,我创建了一个WCF机器的快照,并使用此映像启动了另一个实例

此外,我还创建了一个弹性负载平衡(ELB),将请求路由到这两台服务器

使用我的WCF客户端,如果我使用机器的公共IP地址,我可以成功地连接两台服务器但是如果我使用ELB主机名,我的连接将失败,并出现以下错误:

System.ServiceModel.FaultException:无法发送消息 处理。这很可能是因为 “”不正确或是因为 消息包含无效或过期的安全上下文令牌或 因为绑定之间存在不匹配。安全背景 如果服务由于以下原因中止了通道,则令牌将无效 不活动。防止服务中止空闲会话的步骤 过早增加服务端点上的接收超时 绑定

该错误表明我的安全令牌无效或已过期。因此,我已经检查了发送和接收超时,它已经设置为10分钟:
sendTimeout=“00:10:00”
receiveTimeout=“00:10:00”
(请求通常需要5-15秒)

我的投标配置:


此外,我还仔细检查了:

  • ELB和计算机防火墙在端口80和443上打开
  • 我的ELB配置了正确的证书,并且在端口443上有一个侦听器
  • 我在两台机器上都有一个IIS Web服务器。如果我使用ELB地址,一切正常
  • 如果ELB路由到一台机器,则WCF工作。如果路由到两台机器,WCF将失败

根据您声明的ELB上安装了正确的证书,我假设您正在使用SSL卸载。这可能是一个问题,因为客户端绑定需要使用传输安全性进行配置,但服务将通过端口80接收请求,因此需要不同的绑定配置


但是,当您指定客户端凭据时,WCF需要传输安全性,因此如果需要发送客户端凭据,您可能必须关闭SSL卸载。

我已通过添加以下参数成功解决了此问题:
establishSecurityContext=“false”


谷歌,我学到了:

当此值设置为false时,每次调用都必须使用非对称加密进行密钥交换和验证。此参数的默认值为true,这意味着第一次调用将使用非对称加密创建安全上下文,但它将被缓存,并且进一步调用将仅使用对称加密,这会更快

业绩考虑:

当客户端需要连续进行多次调用时,最好将此参数设置为true,但在负载平衡的情况下,调用被路由到不同的服务器,这会由于无效令牌而中断消息。因此,必须禁用此安全上下文功能


建立安全上下文部分的详细说明:

谢谢dan,但我没有使用SSL卸载。我的客户端、服务器和ELB仅使用HTTPS。我已经设法找到了解决方案,它与安全上下文有关。我已经把答案贴在这里了。