我有一个使用TLS 1.2协议在服务器上运行的WCF服务。我的使用.NET Framework 4.0的应用程序与此服务进行通信。它可以通过TLS 1.2与以下代码进行通信:
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072 | (SecurityProtocolType)768 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
问题在于,只有在客户计算机上至少安装了.NET Framework 4.5时,此代码才有效。此外,某些客户端具有运行此WCF服务的自己的服务器,而这些客户端使用TLS 1.0。我不希望这些客户端强制升级其员工的.NET Framework。
因此,当WCF服务无法通过默认的SecurityProtocol(TLS 1.0)进行通信时,我想处理它引发的CommunicationException。此异常包含以下信息:
System.ServiceModel.CommunicationException:向https://quellon.espaider.com.br/FacilcorpHomolog/DocSite/DSAddIn.svc发出HTTP请求时发生错误。这可能是由于在HTTPS情况下未使用HTTP.SYS正确配置服务器证书。这也可能是由客户端和服务器之间的安全绑定不匹配引起的。 ---> System.Net.WebException:基础连接已关闭:发送时发生意外错误。 ---> System.IO.IOException:身份验证失败,因为远程方已关闭传输流异常。
当抛出此特定异常时,我将使用开头所示的代码,并允许我的应用程序和服务之间进行通信。
我想知道是否可以使用某些属性或方法来标识CommunicationException何时为该属性或方法。我唯一想到的就是使用Message属性,我认为这不是一个好习惯。