对GetResponse的HttpWebRequest调用使用.net 4.5失败,但使用net 4.6通过

本文关键字:net 失败 6通过 GetResponse HttpWebRequest 调用 | 更新日期: 2023-09-27 18:29:39

我们刚刚推出了一项新服务,在针对.Net 4.5框架时,我们很难从一个非常基本的c#控制台应用程序连接到该服务。

我们首先在ASP MVC网站中发现了这个问题,但已经将其分解为最简单的控制台应用程序,以帮助隔离问题

代码片段(没有其他内容):

string myURL = @"https://<myurl>.com/<myurl>";
using (var httpClient = new HttpClient())
{                
    var request = (HttpWebRequest)WebRequest.Create(myURL);
    request.Method = "GET";
    request.ContentLength = 0;
    request.ContentType = "text/xml";
    using (var response = (HttpWebResponse)request.GetResponse())
    {
        if (response.StatusCode != HttpStatusCode.OK)
        {
            ...
        }
        else
        {
            ...
        }
    }                
}

发生了什么

  • Web异常-基础连接已关闭
  • 在调用GetRequest时抛出

服务信息

  • HTTPS服务
  • SHA-256

其他差异

  • 在发送请求变量之前,检查中间窗口中的请求变量不会显示任何差异
  • 在尝试调用后检查请求变量显示了一个区别——System.Net.HttpWebRequest.Pipelined在成功尝试中为true,在失败尝试中为false

安装软件

  • 负载平衡器,在IIS中托管的两个API之间进行平衡

它起作用了吗

是的!

  • 如果将URL放入浏览器中,它就会工作
  • 如果我针对.net 4.6框架重新编译这段代码,它就可以工作了
  • 如果我直接连接到IIS中的网站(通过http),它就可以工作了

我在问什么

  • 是什么原因导致了这个问题
  • 你有没有看到类似的情况,并对可能的补救措施提出建议
  • 您将采取哪些进一步的步骤来帮助调试/解决该问题
  • 将.Net框架版本更改为4.6将如何影响HttpClient或HttpWebRequest?"

谢谢,铝

对GetResponse的HttpWebRequest调用使用.net 4.5失败,但使用net 4.6通过

这通常是由使用TLS v1.2的服务器引起的。我认为Net4.5默认为TLS v1.1,所以您必须将其添加到代码中:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;