调用 CompleteSale 方法时出现 "the underlying connection was closed an unexpected error occurred on a send" 错误
Get "the underlying connection was closed an unexpected error occurred on a send" error when calling CompleteSale method
自 2 周 (02/10) 以来,我在通过 eBay_Service .NET SDK (v967) 调用 API 的方法 CompleteSale
时遇到问题。
当 ERP 尝试发送有关某个订单的一些更新信息时,它会收到此异常:
the underlying connection was closed an unexpected error occurred on a send
所以我还没有收到 API 的回复。
奇怪的事情不止一件:
- 后台有一些批处理,使用相同的.dll,他们
工作正常;
- 重新启动服务器后,第一次调用 "CompleteSale" 工作正常;
- 通过 "regsrv" 命令再次注册 .dll 后,它起作用了
一天就好了;
- 所有使用 ERP 的操作员都通过以下方式连接到服务器
远程桌面,他们都注意到了这个问题。相反,如果我
从我公司的办公室连接,一切正常;
- 我尝试将超时增加到 360 秒(从 60 秒),但没有任何改变。
ERP 正在开发中 (OpenGL) ,所以我无法通过将 "KeepAlive" 设置为 "false" 来修复,显式设置证书 (Tsl1.1 | Tsl1 .2) 或者在 .net 端进行其他干预。 我错了,可以从 SDK 的源代码中完成。
我检查了 api 服务器上的安全协议,发现不再支持 "SSL3" 而 .NET 2.0 中 ServicePointManager.SecurityProtocol 的默认值为SSL3。
我已经通过在 SDK 源代码的 "eBayXmlAPIInterfaceService" class 添加此修补程序解决了这个问题:
//768 = Tsl1.1, 3070 = Tsl1.2
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072 |
(SecurityProtocolType)768;
HttpWebRequest http = (HttpWebRequest) WebRequest.Create(this.Url);
http.Method = "POST";
http.ContentType = "text/xml";
http.ContentLength = data.Length;
http.KeepAlive = false;
可能是 Microsoft 发布了一个修补程序来解决这个问题,但服务器自 2015 年以来就没有更新过。
此外,我已经在我们用来执行 get/post 请求的程序中复制了 ABL 应用程序中的 .net 代码:
DEF VAR w-tsl10 AS System.Net.SecurityProtocolType
w-tsl10 = CAST(System.Enum:ToObject(PROGRESS.Util.TypeHelper:GetType("System.Net.SecurityProtocolType":U), 192), System.Net.SecurityProtocolType).
ystem.Net.ServicePointManager:SecurityProtocol = w-tsl10.
- link 给安全协议验证者:https://www.ssllabs.com/ssltest/index.html
我在与 betfair api 合作时遇到了这个问题。经过一些研究,我发现了这个
System.Net.ServicePointManager.Expect100Continue = true;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
自 2 周 (02/10) 以来,我在通过 eBay_Service .NET SDK (v967) 调用 API 的方法 CompleteSale
时遇到问题。
当 ERP 尝试发送有关某个订单的一些更新信息时,它会收到此异常:
the underlying connection was closed an unexpected error occurred on a send
所以我还没有收到 API 的回复。
奇怪的事情不止一件:
- 后台有一些批处理,使用相同的.dll,他们 工作正常;
- 重新启动服务器后,第一次调用 "CompleteSale" 工作正常;
- 通过 "regsrv" 命令再次注册 .dll 后,它起作用了 一天就好了;
- 所有使用 ERP 的操作员都通过以下方式连接到服务器 远程桌面,他们都注意到了这个问题。相反,如果我 从我公司的办公室连接,一切正常;
- 我尝试将超时增加到 360 秒(从 60 秒),但没有任何改变。
ERP 正在开发中 (OpenGL) ,所以我无法通过将 "KeepAlive" 设置为 "false" 来修复,显式设置证书 (Tsl1.1 | Tsl1 .2) 或者在 .net 端进行其他干预。 我错了,可以从 SDK 的源代码中完成。
我检查了 api 服务器上的安全协议,发现不再支持 "SSL3" 而 .NET 2.0 中 ServicePointManager.SecurityProtocol 的默认值为SSL3。
我已经通过在 SDK 源代码的 "eBayXmlAPIInterfaceService" class 添加此修补程序解决了这个问题:
//768 = Tsl1.1, 3070 = Tsl1.2
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072 |
(SecurityProtocolType)768;
HttpWebRequest http = (HttpWebRequest) WebRequest.Create(this.Url);
http.Method = "POST";
http.ContentType = "text/xml";
http.ContentLength = data.Length;
http.KeepAlive = false;
可能是 Microsoft 发布了一个修补程序来解决这个问题,但服务器自 2015 年以来就没有更新过。
此外,我已经在我们用来执行 get/post 请求的程序中复制了 ABL 应用程序中的 .net 代码:
DEF VAR w-tsl10 AS System.Net.SecurityProtocolType
w-tsl10 = CAST(System.Enum:ToObject(PROGRESS.Util.TypeHelper:GetType("System.Net.SecurityProtocolType":U), 192), System.Net.SecurityProtocolType).
ystem.Net.ServicePointManager:SecurityProtocol = w-tsl10.
- link 给安全协议验证者:https://www.ssllabs.com/ssltest/index.html
我在与 betfair api 合作时遇到了这个问题。经过一些研究,我发现了这个
System.Net.ServicePointManager.Expect100Continue = true;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;