我正在将 HttpRequests 从我的 ASP.NET 应用程序发送到外部服务器,发送到一个 URL,例如:
https://1.2.3.4:12345/Data/Users?Id=1
服务器正在运行一个使用 xml 响应这些请求的服务(如网络服务)。我的代码发出这样的 GET 请求:
var wc = new System.Net.WebClient();
wc.Credentials = credentials; // username and password for service
// get data from server.
string s = Encoding.ASCII.GetString(wc.DownloadData(url));
return s;
它在我的开发机器上运行良好。
但是在我的测试机器(旧的 windows server 2003 64 box)上它失败了,出现了这个异常:
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send.
---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
谷歌搜索告诉我这个错误有大约一百万种不同的可能原因。似乎没有一个适用。
详细信息:
- 我可以通过将 URL 粘贴到浏览器来发出请求,这适用于开发服务器,但在测试服务器上,它适用于 Firefox 但不适用于 IE(!?!)IE给出一个通用的“Internet Explorer 无法显示该网页”- 如果我将 IP 地址更改为不存在的内容,看起来完全一样。
- 服务器由自签名 SSL 证书保护,该证书已添加到两个客户端(测试和开发箱)上本地计算机的受信任证书存储中。但这不太可能是证书问题,因为它在开发上运行良好,并且如果您忽略证书验证(在测试中)仍然会发生。
- 我可以从测试箱远程登录到服务器(使用正确的 IP 和端口)。
任何人都可以建议尝试一下吗?一个可能的原因?缩小范围的方法?
最佳答案
我终于在服务器的windows事件日志中发现了一个相关的错误:
从远程客户端应用程序接收到 TLS 1.0 连接请求,但服务器不支持客户端应用程序支持的密码套件。 SSL 连接请求失败。
我创建了一个新问题,一个实际上可以回答的问题,在这里:How to add to the cipher suites available to ASP.NET HttpRequest client?
关于c# - Http 请求从测试服务器上的 ASP.NET 代码失败(也从 IE 失败......但不是 firefox!?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17106365/