简单的HTTP GET会导致“现有的连接被远程主机强行关闭”,但是仅在带有ClickOnce的WPF中?

我正试图为一种非常奇怪的行为找到一种解释。

代码很简单:

// A simple HTTP GET call with RestSharp.
var url = "https://sandbox.tradier.com/v1/markets/quotes?symbols=MSFT";
var bearerToken = "thisCouldBeYourToken";
var client = new RestClient(url);
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization",$"Bearer {bearerToken}");

var response = await client.ExecutetaskAsync<MyClass>(request)

该代码是与ClickOnce一起部署的.NET 4.7.2 WPF应用程序的一部分。

几天前,此呼叫未作任何更改,突然返回了An existing connection was forcibly closed by the remote host。但是仅适用于此特定的URL。我对其他URL使用完全相同的代码,也没有任何问题。

真正奇怪的是,当我调试应用程序时未发生异常,而是收到了所需的响应。即使我在没有调试的情况下启动应用程序,也没有错误。我重新部署了该应用程序,但仍然在那里发生了错误。因此由于某种原因,呼叫在部署后会以不同的方式发出!顺便说一句:部署的版本也在我的计算机上运行,​​而不是在其他地方。

经过密集的搜索之后,我遇到了this post,它建议将SecurityProtocol显式设置为TLS 1.2(默认值:SystemDefault):

servicepointManager.SecurityProtocol = SecurityProtocolType.Tls12;

它就像一种魅力。现在,已部署的版本也正在运行,没有任何问题。因此,我想该网址现在需要TLS 1.2。但是,为什么该应用程序甚至在直接启动之前就运行,而在通过ClickOnce部署时却遇到了问题?

rustybash 回答:简单的HTTP GET会导致“现有的连接被远程主机强行关闭”,但是仅在带有ClickOnce的WPF中?

我尚未验证它,但似乎KB4520405 (KB4519565) changes ClickOnce application from TLS 1.2 to 1.0

因此,通过ClickOnce,它开始默认启动并启动TLS较旧版本。

本文链接:https://www.f2er.com/3116797.html

大家都在问