7

我正在将 HttpRequests 从我的 ASP.NET 应用程序发送到外部服务器,发送到如下 URL:

https://1.2.3.4:12345/Data/Users?Id=1

服务器正在运行一个使用 xml 响应这些请求的服务(如 Web 服务)。我的代码发出这样的 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 盒)上它失败了,但出现了以下异常:

System.Net.WebException:基础连接已关闭:发送时发生意外错误。
---> System.IO.IOException: Unable to read data from the transport connection: 一个现有的连接被远程主机强行关闭。
---> System.Net.Sockets.SocketException:现有连接被远程主机强行关闭

谷歌搜索告诉我这是错误有大约一百万种不同的可能原因。似乎没有一个适用。

细节:

  • 我可以通过将 URL 粘贴到浏览器中来发出请求,这适用于开发服务器,但在测试服务器上,它适用于 Firefox 但不适用于 IE(!?!) IE 给出了一个通用的“Internet Explorer 无法显示网页" - 如果我将 IP 地址更改为不存在的地址,看起来完全一样。
  • 服务器由自签名 SSL 证书保护,该证书已添加到两个客户端(测试和开发框)上本地计算机的受信任证书存储中。但这不太可能是证书问题,因为它在开发中运行良好,并且如果您忽略证书验证(在测试中)仍然会发生。
  • 我可以从测试框远程登录到服务器(使用正确的 IP 和端口)。

任何人都可以建议尝试一下吗?可能的原因?缩小范围的方法?

4

1 回答 1

2

终于在服务器的windows事件日志中发现了一个相关的错误:

从远程客户端应用程序接收到 TLS 1.0 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。SSL 连接请求失败。

我创建了一个新问题,一个实际上可以回答的问题,这里:如何添加到 ASP.NET HttpRequest 客户端可用的密码套件?

于 2013-06-17T05:46:25.567 回答