HttpWebRequest 调用 GetResponse,使用 .net 4.5 失败但使用 net 4.6 通过
HttpWebRequest call to GetResponse, fails using .net 4.5 but passes using net 4.6
我们刚刚推出了一项新服务,但在以 .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。
其他差异
- 在发送之前检查中间 window 中的请求变量显示没有区别。
- 在尝试调用后检查请求变量显示出一个区别 - System.Net.HttpWebRequest.Pipelined 在成功尝试中为真,在失败尝试中为假。
设置要点
- 负载平衡器,在 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;
我们刚刚推出了一项新服务,但在以 .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。
其他差异
- 在发送之前检查中间 window 中的请求变量显示没有区别。
- 在尝试调用后检查请求变量显示出一个区别 - System.Net.HttpWebRequest.Pipelined 在成功尝试中为真,在失败尝试中为假。
设置要点
- 负载平衡器,在 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;