一般情况下调用远程WebService通过代理类直接访问就可以,可是如果WebService是在https站点下,调用时就要分情况考虑了,整理了一下:
1、客户端证书已正确安装
指已经在客户端安装了客户端证书到证书存储区,且证书符合以下几个条件:
◆ 证书中定义的使用者与访问WebService时使用的域名一致;
◆ 证书未过期;
◆ 证书链在本机完整可信;
关于证书链完整可信,是指本证书,以及向上追溯的各级颁发者,直至根证书颁发者,都被系统承认。
此时直接调用即可,与访问http时没有区别,底层会自动处理SSL握手。如果有任何一项不符合要求,调用时就会产生“基础连接已经关闭:未能为 SSL/TLS 安全通道建立信任关系”的异常,此时要使用2中的方法。
2、客户端证书未正确安装
- public void CallRemoteWebService()
- {
- //指定证书验证回调方法,Lamda表达式,直接返回true,表示忽略所有错误
- ServicePointManager.ServerCertificateValidationCallback = (source, cert, chain, errors) => true;
- //创建WebService的代理实例
- var proxy = new Proxy();
- //远程调用
- proxy.DoSomething();
- }
关键在于要让证书验证时忽略所有错误。不用担心,忽略错误只是指不用判断证书有效性,并不会影响通信信道的加密过程。