我们刚刚推出了一项新服务,在针对.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?"
谢谢,铝
这通常是由使用TLS v1.2的服务器引起的。我认为Net4.5默认为TLS v1.1,所以您必须将其添加到代码中:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;