C#解决访问API显示基础连接已经关闭的问题
作者:初九之潜龙勿用
最近在 Web 部署百度 AI 图像识别 AipSdk.dll 封装库的时候,在调用OCR图像识别 API 的时候,显示为 “ 基础连接已经关闭: 接收时发生错误,” ,并且运行后直接崩溃,所以本文给大家介绍了C#解决访问API显示基础连接已经关闭的问题,需要的朋友可以参考下
故障现象
最近在 Web 部署百度 AI 图像识别 AipSdk.dll 封装库的时候,在调用OCR图像识别 API 的时候,显示为 “ 基础连接已经关闭: 接收时发生错误。” ,并且运行后直接崩溃:
以身份证识别为例,如下代码:
var API_KEY = ""; var SECRET_KEY = ""; var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY); client.Timeout = 60000; // 修改超时时间 Newtonsoft.Json.Linq.JObject result = new Newtonsoft.Json.Linq.JObject(); var options = new Dictionary<string, object>{ {"detect_risk", "true"}, {"detect_direction", "true"}, {"detect_photo", "true"} }; byte[] image = getImageByte(imagePath); result = client.Idcard(image, "front", options);
问题出在 client.Idcard(image, "front", options); 调用上,这种现象不是每次都会发生,在其它部署的 IIS 站点上未发现此类问题,且部署配置一致。
开发运行环境
操作系统: Windows Server 2019 DataCenter
.net版本: .netFramework4.7.2
开发工具:VS2019 C#
解决
通过在Page_Load 服务器事件添加如下语句,解决:
void Page_Load(Object sender, EventArgs e) { System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12; }
System.Net.ServicePointManager.SecurityProtocol 属性可选择安全套接字层 (SSL) 或传输层安全 (TLS) 协议的版本,以用于新连接,不会更改现有连接。
System.Net.SecurityProtocolType 指定 Schannel 安全包支持的安全协议的可选择项见下表:
序号 | 值 | 说明 |
---|---|---|
1 | Ssl3 | 指定安全套接字层 (SSL) 3.0 安全协议。 SSL 3.0 已由传输层安全性 (TLS) 协议取代,之所以仍然提供这个方法,只是为了向后兼容。 |
2 | SystemDefault | 允许操作系统选择要使用的最佳协议,并将其用于阻止不安全的协议。 应使用此值,除非应用有特定原因不得使用此值。 |
3 | Tls | 指定传输层安全 (TLS) 1.0 安全协议。 TLS 1.0 协议在 IETF RFC 2246 中定义。 |
4 | Tls1 | 指定传输层安全 (TLS) 1.1 安全协议。 TLS 1.1 协议在 IETF RFC 4346 中定义。 在 Windows 系统上,从 Windows 7 开始支持此值。 |
5 | Tls2 | 指定传输层安全 (TLS) 1.2 安全协议。 TLS 1.2 协议在 IETF RFC 5246 中定义。 在 Windows 系统上,从 Windows 7 开始支持此值。 |
到此这篇关于C#解决访问API显示基础连接已经关闭的问题的文章就介绍到这了,更多相关C#访问API显示连接关闭内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!