我们的服务器已禁用SSLv3,TLS1.0和TLS1.1。因此,在尝试检索WSDL时尝试添加服务引用时Visual Studio失败。
“基础连接已关闭:发送时发生意外错误。 无法从传输连接读取数据:远程主机强制关闭现有连接。 远程主机强制关闭现有连接 元数据包含无法解析的引用: 向https://mywebsite.com/Service/Service.svc?wsdl发出HTTP请求时发生错误。这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书。这也可能是由客户端和服务器之间的安全绑定不匹配引起的。 底层连接已关闭:发送时发生意外错误。 身份验证失败,因为远程方已关闭传输流。 如果在当前解决方案中定义了服务,请尝试构建解决方案并再次添加服务引用。“
可以在浏览器中访问WSDL。启用TLS 1.0 / 1.1和SSLv3时,WSDL下载正常。但是,由于PCI要求,我们必须禁用SSLV3,TLS1.0和TLS1.1。
我知道以下System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
,但我不太确定这是否会在连接控制台客户端或WCF服务(或两者)中进行。
任何建议都将不胜感激
答案 0 :(得分:1)
下面的行需要在客户端中,因为这就是建立连接。
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
根据此博客TLS 1.2 and .NET Support: How to Avoid Connection Errors,以上内容适用于.Net 4.5
对于.Net 4.6及更高版本,它将默认为TLS 1.2,您无需指定TLS 1.2
对于.Net 4.0,您需要以下代码。
System.Net.ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
NET 3.5或更低版本,您需要为您的操作系统安装适当的Microsoft补丁(在博客中列出)。