基础连接已关闭。发送时发生意外错误

The underlying connection was closed. An unexpected error occurred on a send

我正在尝试连接到 API。我会在序言中说这是我们几个月前在做的一个项目,它正在工作,至少在某种意义上我可以伸出手来从 API 中获取数据。我们将该项目搁置了几个月,然后重新开始,现在与这个 API 的连接不再有效。在项目中,我们连接到 2 API,第二个 API 连接仍然工作正常。我试图在 Postman 中使用相同的 headers 重新创建请求并且它工作正常。我以前遇到过这个问题,并添加了以下行:

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

过去为我解决了这个问题,但我的方法中有该代码,但现在仍然失败。

下面是完整的方法:

var encodedData = System.Convert.ToBase64String(
                                    System.Text.Encoding.GetEncoding("ISO-8859-1")
                                    .GetBytes("XXXXXXXXXXXXXXXXXXX:")
                                ); 

string headerString = "Basic " + encodedData;

var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://xxxxxxxxxxxxxxx);

httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "GET";
httpWebRequest.Headers.Add(HttpRequestHeader.Authorization, headerString);
httpWebRequest.KeepAlive = false;    

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
//ServicePointManager.SecurityProtocol = (SecurityProtocolType)768;   
//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

Console.WriteLine("Protocol: " + ServicePointManager.SecurityProtocol);

//ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls |
//                           SecurityProtocolType.Tls11 |
//                           SecurityProtocolType.Tls12;

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();   

    writelog("Result: " + result);
}

不确定这是否有帮助,但是当我尝试分析 Fiddler 中的流量时,我可以看到来自 Postman 的请求正常,但是当我 运行 上面的代码时,我从来没有得到任何流量离开我的网络。只是从本地主机到 /vshub/XXXXXXXXXXX 的大量流量。正如您从注释掉的代码中看到的那样,我还尝试了 ServicePointManager.SecurityProtocol 的其他排列,但是 none 已经奏效了。

我无能为力地试图解决这个问题。 任何帮助,将不胜感激! 哦,我在 runtime 4.0framework 4.6

更新:运行 备用机器上的代码使用相同的 运行 时间和框架,并且工作正常。似乎越来越有可能是我本地计算机上的防火墙问题。

非常感谢!

我解决了。我尝试 运行 在其他机器上使用全新安装的 Visual Studio 代码。它在所有其他机器上运行良好。我在我的本地机器上重新安装了 VS,代码工作了。不确定过去一两个月我的 VS 发生了什么变化,但显然有些东西已损坏。

这实际上是一个与TLS协议相关的问题。 在调用服务之前使用它应该可以解决问题,

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;