我有一个自定义WebUploadTraceListener : TraceListener
,用于将HTTP(最终是HTTPS)POST数据发送到将其写入数据库的Web服务。
我已经测试了同时使用WebClient
和HttpWebRequest
进行此操作,根据经验,后者看到了更好的性能。
由于数据的单向性,我不关心服务器响应。但我发现如果我不处理HttpWebResponse
我的代码锁定第三次写入。我认为这是因为DefaultConnectionLimit设置和系统没有重用资源......
请注意,您确实需要处理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字段。
HttpWebRequest
和stream.Write
是.Net4.0
中最快捷的方法吗?答案 0 :(得分:1)
通常,httpRequest.GetResponse
仅将数据发布到服务器并且不会将任何内容下载到客户端,除了告知客户端服务器是否成功处理该请求的信息。
您只能在致电GetResponseStream
时收到相应的数据。如果有关您不希望收到的请求的成功/错误的信息,您无论如何都无法判断服务器是否成功处理请求。
所以答案是:
HttpWebRequest
,没有。你几乎没有得到任何数据
你不想要。