我有一个 REST 网络服务,它使用 WCF 客户端调用外部 SOAP 网络服务。此 REST Web 服务托管在我们测试环境中的 IIS 中。
当调用 REST web 服务时,后者调用外部 web 服务(使用 WCF 客户端),在 IIS 中重新启动 REST web 服务后,WCF 客户端的第一次调用会抛出SecurityNegotiationException。对 REST Web 服务的第二次调用以及间接调用和所有后续调用均成功。
为了说明这一点,这里有一张图片:
此SecurityNegotiationException如下所示:
System.ServiceModel.Security.SecurityNegotiationException:无法为具有权限“X”的 SSL/TLS 建立安全通道。---> System.Net.WebException:请求被中止:无法创建 SSL/TLS 安全通道。
端点和绑定如下(通过添加服务引用生成,稍微修改了customBinding):
<endpoint address="https://..." binding="customBinding" bindingConfiguration="MyBinding" contract="WS_..." name="MyEndpoint" />
...
<customBinding>
<binding name="MyBinding">
<textMessageEncoding messageVersion="Soap11" />
<security authenticationMode="UserNameOverTransport" />
<httpsTransport requireClientCertificate="true" />
</binding>
</customBinding>
调用外部webservice的代码:
MyEndpointClient client = new MyEndpointClient("MyEndpoint");
client.ClientCredentials.UserName.UserName = authInfo.Username;
client.ClientCredentials.UserName.Password = authInfo.Password;
client.ClientCredentials.ClientCertificate.Certificate = authInfo.Certificate;
var result = client.requestInformation(parameters); // This fails the first time after IIS restart.
authInfo.Certificate 正在加载如下:
authInfo.Certificate = new X509Certificate2(certificateBytes, certificatePassword);
慕标5832272
相关分类