Visual Studio 2012禁用TLS 1.0后添加服务引用报错问题
解决VS2012添加服务引用时的TLS 1.0禁用问题
我碰到过好几个类似的场景,你这个问题的核心在于:VS2012自带的服务引用工具(底层依赖SvcUtil.exe)默认并没有启用TLS 1.1/1.2,哪怕你的项目已经切换到了.NET Framework 4.5。虽然项目本身运行时能正常用TLS 1.1/1.2连接数据库,但VS的工具链还是在用老的TLS 1.0去请求服务元数据,这就导致了和之前SQL连接一样的报错。
给你几个可行的解决方案:
方案一:修改VS2012的配置文件,强制启用TLS 1.1/1.2
- 找到VS2012的配置文件路径:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe.config - 用文本编辑器(以管理员权限打开)编辑这个文件
- 在
<configuration>节点内添加对应配置:- 如果文件里已有
<runtime>节点,就把下面的配置插入其中;没有的话就新建<runtime>节点:<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" /> </runtime> - 同时也可以在
<system.net>节点下补充配置(没有<system.net>就新建):<system.net> <settings> <servicePointManager securityProtocol="Tls11,Tls12" /> </settings> </system.net>
- 如果文件里已有
- 保存文件后重启VS2012,再尝试添加服务引用
方案二:手动用SvcUtil.exe生成服务代理
如果修改VS配置不方便,也可以绕过可视化工具,直接用命令行生成代理类:
- 打开VS2012的开发者命令提示符(以管理员身份运行)
- 先设置环境变量强制启用强加密:
set SCHANNEL_SUSE_STRONG_CRYPTO=1 - 运行SvcUtil命令拉取服务元数据并生成代理:
svcutil.exe http://你的服务URL?wsdl - 命令执行完成后,会生成一个
.cs代理文件和一个output.config配置文件,把这两个文件添加到你的网站项目里,手动配置服务引用即可
额外注意事项
- 确保你的Windows系统已经安装了支持TLS 1.1/1.2的补丁(Win7及以上需要安装KB3140245这类补丁,Win8及以上一般自带)
- 如果服务端只支持TLS 1.2,要确保配置里只指定
Tls12而不是包含TLS1.1
内容的提问来源于stack exchange,提问作者Pryach
相关产品推荐
相关产品推荐

