使 HttpWebRequest 忽略响应
Make HttpWebRequest ignoring response
我有一个自定义 WebUploadTraceListener : TraceListener
,用于将 HTTP(最终是 HTTPS)POST 数据发送到将数据写入数据库的 Web 服务。
我已经用 WebClient
和 HttpWebRequest
进行了测试,根据经验,我发现后者的性能更好。
由于数据的单向性,我不关心服务器响应。但是我发现如果我不处理 HttpWebResponse
我的代码会在第三次写入时锁定。我认为这是因为 DefaultConnectionLimit 设置和系统不重用资源...
每 Jon Skeet
Note that you do need to dispose of the WebResponse returned by request.GetResponse - otherwise the underlying infrastructure won't know that you're actually done with it, and won't be able to reuse the connection.
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 数据的速度,并尽快返回主程序流程。因为我正在跟踪程序流,所以同步写入更可取,但不是强制性的,因为我总是可以添加一个 POST 字段,其中包括一个 Tick
计数。
HttpWebRequest
和 stream.Write
是在 .Net4.0
中最快的方法吗?
- 是否有更便宜的方法来丢弃不需要的响应?
实际上,httpRequest.GetResponse
只有post数据到服务器,不向客户端下载任何东西,除了告诉客户端请求是否被服务器成功处理的信息。
只有在调用GetResponseStream
时才会得到响应数据。如果您不想收到关于请求的 success/error 的信息,您无论如何都无法判断服务器是否成功处理了请求。
所以答案是:
- 是的,这是托管代码的最低级别,除非你想搞砸
带套接字(你不应该)
- 与
HttpWebRequest
,没有。你几乎得不到任何数据
你不要。
我有一个自定义 WebUploadTraceListener : TraceListener
,用于将 HTTP(最终是 HTTPS)POST 数据发送到将数据写入数据库的 Web 服务。
我已经用 WebClient
和 HttpWebRequest
进行了测试,根据经验,我发现后者的性能更好。
由于数据的单向性,我不关心服务器响应。但是我发现如果我不处理 HttpWebResponse
我的代码会在第三次写入时锁定。我认为这是因为 DefaultConnectionLimit 设置和系统不重用资源...
每 Jon Skeet
Note that you do need to dispose of the WebResponse returned by request.GetResponse - otherwise the underlying infrastructure won't know that you're actually done with it, and won't be able to reuse the connection.
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 数据的速度,并尽快返回主程序流程。因为我正在跟踪程序流,所以同步写入更可取,但不是强制性的,因为我总是可以添加一个 POST 字段,其中包括一个 Tick
计数。
HttpWebRequest
和stream.Write
是在.Net4.0
中最快的方法吗?- 是否有更便宜的方法来丢弃不需要的响应?
实际上,httpRequest.GetResponse
只有post数据到服务器,不向客户端下载任何东西,除了告诉客户端请求是否被服务器成功处理的信息。
只有在调用GetResponseStream
时才会得到响应数据。如果您不想收到关于请求的 success/error 的信息,您无论如何都无法判断服务器是否成功处理了请求。
所以答案是:
- 是的,这是托管代码的最低级别,除非你想搞砸 带套接字(你不应该)
- 与
HttpWebRequest
,没有。你几乎得不到任何数据 你不要。