我有一个托管在 Windows Azure Web 角色中的 ASP.NET Web API 应用程序。此应用程序的目的是将 Http 请求代理到其他启用 Web 的端点 - 例如服务总线中继并返回它们的响应。
有时,我们的应用程序在发送具有重要 (>5MB) 负载的请求时会引发异常。这可能会在 20 个具有大负载的请求中发生 1 个。
异常详细信息:System.AggregateException:发生一个或多个错误。---> System.Web.HttpException:客户端断开连接。
在 System.Web.Hosting.IIS7WorkerRequest.EndRead(IAsyncResult asyncResult) 在 System.Web.HttpBufferlessInputStream.EndRead(IAsyncResult asyncResult) 在 System.Net.Http.StreamToStreamCopy.BufferReadCallback(IAsyncResult ar) --- 内部异常堆栈跟踪结束 - -- ---> (Inner Exception #0) System.Web.HttpException (0x800703E3): 客户端断开连接。在 System.Web.Hosting.IIS7WorkerRequest.EndRead(IAsyncResult asyncResult) 在 System.Web.HttpBufferlessInputStream.EndRead(IAsyncResult asyncResult) 在 System.Net.Http.StreamToStreamCopy.BufferReadCallback(IAsyncResult ar)<--- ; TraceSource 'w3wp.exe' 事件
我们使用 .NET 4.5 中的 System.Net.HttpClient 发送这些 Http 请求。
public class ProxyController : ApiController
{
private static readonly HttpClient HttpClient = new HttpClient();
private static readonly Uri BaseUri = new Uri("http://webendpoint.com");
public HttpResponseMessage Post()
{
var newUri = new Uri(BaseUri, Request.RequestUri.PathAndQuery);
var request = new HttpRequestMessage(HttpMethod.Post, newUri)
{
Content = this.Request.Content
};
var task = HttpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
task.Wait();
var response = task.Result;
return new HttpResponseMessage(response.StatusCode)
{
Content = new PushStreamContent((stream, content, ctx) =>
{
var tempStream = response.Content.ReadAsStreamAsync().Result;
tempStream.CopyToAsync(stream).Wait();
stream.Flush();
stream.Close();
})
};
}
}
关于可能导致此问题的任何想法?