【问题标题】:WebRequest class and set keepAlive to falseWebRequest 类并将 keepAlive 设置为 false
【发布时间】:2020-07-17 15:56:27
【问题描述】:

我正在使用WebRequest 类调用网络服务。

我想将 KeepAlive 属性设置为“false”,但我没有找到此属性。

我该怎么做?

【问题讨论】:

  • KeepAlive 是属于HttpWebRequest 的属性,在创建新的WebRequest 时生成的类对象:HttpWebRequest request = WebRequest.CreateHttp(URI);KeepAlive 在 Http 1.1 中通常设置为 true,在 Http 2.0 中被忽略,因为它是默认值,您无法更改它。 Http 1.0(如果你能找到在某处使用它的东西),可以设置为false(然后,这取决于你会发生什么)。如果设置KeepAlive = false,则可以解释为ConnectionClose
  • 顺便说一句,您没有创建连接,您需要一个连接,它是分配给您的连接请求的ServicePoint 来处理这个问题。 KeepAlive 也是握手中执行的事务的一部分。为什么你认为你需要设置KeepAlive = false

标签: c# webrequest keep-alive


【解决方案1】:

正如微软所提到的。 Source

我们建议不要将 WebRequest 或其派生类用于新开发。而是使用 System.Net.Http.Http.HttpClient 类。

WebRequest 是基本的抽象类。 NET 请求/响应模型来访问来自 Internet 的数据。因此,您可以使用 HttpClient 代替具有 KeepAlive 属性的。

C# How to set HttpClient Keep-Alive to false
https://docs.microsoft.com/fr-fr/dotnet/api/system.net.http.httpclient?view=netcore-3.1

【讨论】:

  • 这很有帮助,尽管引用的未知来源的文档令人困惑:首先是“我们建议......使用 WebRequest”,然后是“相反,使用...... HttpClient”。似乎第一句话缺少“not to use”。 English documentation for WebRequest 表示“我们不建议您使用 WebRequest 或其派生类进行新开发。”并翻译法语版本我得到“我们不建议使用 WebRequest 或其派生类进行新开发。”
  • 改为使用 System.Net.Http.HttpClient 类。 这就是为什么我说使用httpClient
  • 是的,该声明已翻译,我已复制。来自 OPs 链接源。
  • 对,但你看到第一句话是在说“使用”——而不是“不使用”——WebRequest?第一句说“使用 WebRequest”,然后第二句说“使用 ... HttpClient”。这就是为什么我说它令人困惑。
  • 您可以通过request.Headers[HttpRequestHeader.Connection]request.Headers[HttpRequestHeader.KeepAlive] 访问各自的标头,尽管the documentation 表示Connection 标头是“受限的”。不过,您如何使用WebRequest?它是一个抽象类,所以最终你必须使用派生类。也许您已经在使用 HttpWebRequest 并且只需要转换它?该类公开了正确的ConnectionKeepAlive 属性。
猜你喜欢
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
  • 2014-09-30
  • 2014-05-08
  • 2012-08-10
相关资源
最近更新 更多