我遇到了TLS 1.2的问题。如果我在客户端机器上启用tls1.0,它就能正常工作,但这并不是推荐的方法。
异常信息为- 客户端和服务器不能通信,因为它们没有共同的加密算法。 System.ComponentModel.Win32Exception (0x80004005):客户端和服务器不能通信,因为它们没有共同的加密算法。
我的应用程序的目标框架是.NET 4.6.2。
我遇到了TLS 1.2的问题。如果我在客户端机器上启用tls1.0,它就能正常工作,但这并不是推荐的方法。
异常信息为- 客户端和服务器不能通信,因为它们没有共同的加密算法。 System.ComponentModel.Win32Exception (0x80004005):客户端和服务器不能通信,因为它们没有共同的加密算法。
我的应用程序的目标框架是.NET 4.6.2。
这里有两种可能的情况,我使用了第二种情况。
如果您在生产环境中遇到此问题,并且可以轻松地将新代码部署到生产环境,则可以使用以下解决方案:
在调用API之前,您可以添加以下代码行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // .NET 4.5
如果您无法部署新代码并且想要使用与生产环境中相同的代码来解决此问题,则可以通过更改配置文件中的某些设置来完成。
您可以在配置文件中添加以下任一选项之一:
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
</runtime>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSystemDefaultTlsVersions=false"
</runtime>
以下是我解决问题的故障排除步骤。
<system.web>
<compilation debug="true" targetFramework="4.8" />
<httpRuntime targetFramework="4.8" />
检查已安装的 MySql.Data 和 MySql.Web 版本(为 6.9.9.0)
安装并更新 MySql.Data 和 MySql.Web 至版本 8.0.23
此时,我的本地 .NET Web 服务器可以与本地 MySql 服务器通信。但是,在部署到生产服务器后(仅启用 TLS 1.2),会出现不同的错误消息。
Fail to load MySql.Data assembly
WRN: Assembly binding logging is turned OFF.