HttpWebRequest调用GetResponse,使用.net 4.5失败,但使用net 4.6传递

时间:2016-01-08 12:43:41

标签: c# httpwebrequest

我们刚刚推出了一项新服务,在针对.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之间取得平衡。

它曾经有效吗?

是!

  • 如果将网址放入浏览器 - 它可以正常工作。
  • 如果我重新编译针对.net 4.6框架的代码 - 它可以工作。
  • 如果我直接连接到IIS中的站点(通过http),它就能正常工作。

我在问什么

  • 可能导致此问题的原因是什么?
  • 您是否见过类似情况并提出可能的补救建议?
  • 您将采取哪些其他步骤来帮助调试/解决问题。
  • 如何将.Net框架版本更改为4.6会影响HttpClient或HttpWebRequest?&#34;

谢谢, 人。

1 个答案:

答案 0 :(得分:3)

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

button_1.addEventListener(MouseEvent.CLICK, Scene_1ToScene2);

function Scene_1ToScene2(event: MouseEvent): void {
flv.Stop(); 
gotoAndPlay(1, "Scene 2");

}