使HttpWebRequest忽略响应

时间:2016-02-29 01:41:22

标签: c# .net-4.0 httpwebrequest

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

我已经测试了同时使用WebClientHttpWebRequest进行此操作,根据经验,后者看到了更好的性能。

由于数据的单向性,我不关心服务器响应。但我发现如果我不处理HttpWebResponse我的代码锁定第三次写入。我认为这是因为DefaultConnectionLimit设置和系统没有重用资源......

Jon Skeet

  

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

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. 是否有更便宜的方式来丢弃不必要的响应?

1 个答案:

答案 0 :(得分:1)

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

您只能在致电GetResponseStream时收到相应的数据。如果有关您不希望收到的请求的成功/错误的信息,您无论如何都无法判断服务器是否成功处理请求。

所以答案是:

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