为啥在 WCF 应用程序的 Web.config 文件中添加 httpRuntime targetFramework 可以解决与 TLS 相关的连接问题?

Posted

技术标签:

【中文标题】为啥在 WCF 应用程序的 Web.config 文件中添加 httpRuntime targetFramework 可以解决与 TLS 相关的连接问题?【英文标题】:Why does adding httpRuntime targetFramework in Web.config file in a WCF application resolving TLS related connectivity issue?为什么在 WCF 应用程序的 Web.config 文件中添加 httpRuntime targetFramework 可以解决与 TLS 相关的连接问题? 【发布时间】:2019-02-22 21:57:10 【问题描述】:

我们有一些 ASP.NET 和 WCF 应用程序在发布时不断迁移到最新的 .net 框架版本。在我们到达 .NET Framework 4.6.2 之前,此迁移工作正常,从那时起我们开始看到如下所示的 TLS 连接错误。当我添加 Web.config文件中<system.web>下的<httpRuntime targetFramework="4.6.2" />,错误消失了。据我了解,此设置强制应用程序在 .NET Framework 4.6.2 下运行(没有这个,我相信应用程序在 .NET Framework 4.0 下运行),这导致它使用底层操作系统的默认协议来保护连接。如果我遗漏了什么,请纠正我的理解。

System.AggregateException:发生一个或多个错误。 ---> System.Net.Http.HttpRequestException: 发送请求时出错。 ---> System.Net.WebException:底层连接已关闭:发送时发生意外错误。 ---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。 ---> System.Net.Sockets.SocketException: 现有连接被远程主机强行关闭 在 System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult) 在 System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult) --- 内部异常堆栈跟踪结束 --- 在 System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) 在 System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar) --- 内部异常堆栈跟踪结束 --- 在 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar) --- 内部异常堆栈跟踪结束 ---

【问题讨论】:

【参考方案1】:

看看这个:https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support。 TLS 1.2 是 .NET 4.6 及更高版本的默认设置,4.5 支持但不是默认设置,4.0 及更低版本则不太支持。

也许您的任一应用程序更新、IIS 或操作系统配置更改已禁用 TLS 版本

至于设置<httpRuntime targetFramework="4.6.2" />,我们发现了同样的事情。更改项目文件中的目标框架和compilation 元素中的targetFramework 值是不够的。它仍然为 TLS 保留 httpRuntime 元素添加到 web.config 的注释块中。

(这里推荐的答案也有帮助:What do the TargetFramework settings mean in web.config in ASP .NET MVC?)

【讨论】:

以上是关于为啥在 WCF 应用程序的 Web.config 文件中添加 httpRuntime targetFramework 可以解决与 TLS 相关的连接问题?的主要内容,如果未能解决你的问题,请参考以下文章

用户密码错误 (WCF):在 web.config 中未正确配置用户密码

从类库调用 WCF 服务:App.Config 与 Web.Config?

WCF Web 服务未部署在 localhost ... web.config ... 端点上

WCF开发中的Web.config和App.config

是否可以通过 IIS 管理器中的用户界面在 web.config ASP .Net Web 应用程序中的 <system.Servicemodel> 中查看/编辑 WCF 配置?

如何从服务“内部”的代码访问托管在 IIS 中的 WCF 服务的 web.config