使 HttpWebRequest 忽略响应

本文关键字:响应 HttpWebRequest | 更新日期: 2023-09-27 18:36:42

我有一个自定义WebUploadTraceListener : TraceListener,用于将HTTP(最终是HTTPS)POST数据发送到将其写入数据库的Web服务。

我已经用WebClientHttpWebRequest测试过这样做,根据经验,我看到了后者更好的性能。

由于数据的单向性质,我不关心服务器响应。 但我发现,如果我不处理HttpWebResponse,我的代码就会在第三次写入时锁定。我认为这是因为默认连接限制设置和系统不重用资源......

每乔恩·斯基特

请注意,您确实需要处理请求返回的 Web 响应。GetResponse - 否则,底层基础架构将不知道您实际上已经完成了它,并且无法重用连接。

HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(ServiceURI);
httpRequest.Method = "POST";
httpRequest.ContentType = "application/x-www-form-urlencoded";
try
{
    using (Stream stream = httpRequest.GetRequestStream())
    {
        stream.Write(postBytes, 0, postBytes.Length);
    }
    using (HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse())
    {
        /// discard response
    }
}
catch (Exception)
{
    /// ...
}

我想最大限度地提高发送 POST 数据的速度,并尽快返回主程序流。 因为我正在跟踪程序流,所以同步写入是可取的,但不是强制性的,因为我总是可以添加一个包含Tick计数的 POST 字段。

  1. HttpWebRequeststream.Write.Net4.0中执行此操作的最快方法吗?
  2. 有没有更便宜的方法来丢弃不需要的响应?

使 HttpWebRequest 忽略响应

通常,httpRequest.GetResponse只将数据发布到服务器,不会向客户端下载任何内容,除了告诉客户端服务器是否成功处理请求的信息。

只有在调用 GetResponseStream 时,才会获得响应数据。如果即使是关于你不想接收的请求的成功/错误的信息,你也不必知道服务器是否成功处理请求。

所以答案是:

  1. 是的,这是托管代码的最低级别,除非你想搞砸带插座(你不应该)
  2. 有了HttpWebRequest,没有。你几乎得不到任何数据你不想要。