我正在向第三方Web服务发送基本请求,但它总是在安装了.net v4.0的计算机上超时。 (超时异常:“操作已超时”)
如果安装了4.5,它可以正常工作,但我们需要支持4.0
服务主机已禁用对SSL3协议的支持,因此以下内容对我不起作用。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
发送请求的代码是基本的
var request = ((HttpWebRequest)WebRequest.Create("https://hostname.com"));
var response = (HttpWebResponse)request.GetResponse(); //timeout here
这也没有用,因为它永远不会达到这一点
ServicePointManager.ServerCertificateValidationCallback = (sender,certificate,chain,sslPolicyErrors)=> true;
如果我只是使用网络浏览器导航到第三方网络服务,则可以正常使用。
在这种情况下,扩展超时值显然不起作用,因为第三方服务器实际上从未实际返回响应。
我该怎么做才能解决这个问题?
更新 问题发生在win7和win server 2003机器上。 另一项测试是在带有.NETv4.0的XP机器上完成的。测试通过并收到回复。 所以.NETv4.0可能不是这里的问题。 (但升级到4.5确实解决了以前的问题。)
问题必须是环保的。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
dotwilbert的回答发现here
Windows 7上的.NET框架实现了TLS扩展:服务器名称指示(RFC4366)。根据你的帖子这个TLS是什么 警报表示服务器正在响应“无法识别的名称”。不确定 为什么连接被报告超时,因为它确实没有。 您的网络跟踪应显示客户端启动连接 在[FIN,ACK]之后终止。降级到SSL3避免了 调用SNI。
仅供参考:Windows XP上的相同.NET框架不使用TLS服务器 名称指示扩展。你的程序将在那里工作....
在我的情况下,我将此事件的跟踪记录为缺少的ServerName Apache中的指令。将ServerName添加到SSL配置 解决了它,因为现在网络服务器不再不知道它 名。
第三方更新了SSL配置以包含ServerName,问题已解决。
答案 1 :(得分:0)
您可以使用HttpWebRequest.Timeout,并且使用该属性,它有两个参数来设置超时等待时间。