【发布时间】:2016-02-29 01:41:21
【问题描述】:
我有一个自定义的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中执行此操作的最快方法吗? - 有没有更便宜的方法来丢弃不需要的响应?
【问题讨论】:
标签: c# .net-4.0 httpwebrequest