【发布时间】:2015-02-07 16:21:37
【问题描述】:
我正在使用 .NET 4.5 HttpClient 类多次向服务器发出 POST 请求。前 3 次调用运行很快,但第四次调用 await client.PostAsync(...) 时,它会挂起几秒钟,然后返回预期的响应。
using (HttpClient client = new HttpClient())
{
// Prepare query
StringBuilder queryBuilder = new StringBuilder();
queryBuilder.Append("?arg=value");
// Send query
using (var result = await client.PostAsync(BaseUrl + queryBuilder.ToString(),
new StreamContent(streamData)))
{
Stream stream = await result.Content.ReadAsStreamAsync();
return new MyResult(stream);
}
}
服务器代码如下:
HttpListener listener;
void Run()
{
listener.Start();
ThreadPool.QueueUserWorkItem((o) =>
{
while (listener.IsListening)
{
ThreadPool.QueueUserWorkItem((c) =>
{
var context = c as HttpListenerContext;
try
{
// Handle request
}
finally
{
// Always close the stream
context.Response.OutputStream.Close();
}
}, listener.GetContext());
}
});
}
在// Handle request 处插入调试语句表明服务器代码似乎没有在请求发送后立即接收。
我已经调查过是否可能是客户端没有关闭响应的问题,这意味着可以达到 ServicePoint 提供程序允许的连接数。但是,我尝试增加ServicePointManager.MaxServicePoints,但这根本没有效果。
我也发现了这个类似的问题:
.NET HttpClient hangs after several requests (unless Fiddler is active)
我不认为这是我的代码的问题 - 即使将我的代码更改为那里给出的确切内容也不能解决问题。
【问题讨论】:
-
你试过设置
ServicePointManager.DefaultConnectionLimit吗? -
是的,我尝试将其设置为 10,但没有任何效果
-
使用不同的服务器 (google.com)。问题还在吗?
标签: c# .net httpwebrequest