ASP.NET中的Oubound HttpWebRequest在目标服务器恢复后仍然超时

时间:2013-04-18 20:55:07

标签: c# asp.net httpwebrequest

我们有一个ASP.NET Web应用程序(MVC3),它使用HttpWebRequest调用另一个Web服务器。

无论如何,当远程服务器出现故障时,我们会开始出现超时错误,这是我们所期望的。

但是,当远程服务器恢复时,我们会继续发生超时错误。刷新应用程序池可以解决问题,但我们真的不想每次都重新启动应用程序池。

是否存在可能存储错误超时连接的池?我的期望是,如果连接抛出错误,它将被处理掉,然后我们下次会得到一个新的连接,但事实并非如此。

以下是我们的代码:

var request = (HttpWebRequest)HttpWebRequest.Create(url);
int timeout = GetTimeout();
request.ReadWriteTimeout = timeout;

WebRequest.DefaultWebProxy = null; 

var asyncResult = request.BeginGetResponse(null, null);
bool complete = asyncResult.AsyncWaitHandle.WaitOne(timeout);
if (!complete)
{
    ThrowTimeoutError(url, timeout);
}
using (var webResponse = request.EndGetResponse(asyncResult))
{
    using (var responseStream = webResponse.GetResponseStream())
    {
        using (var responseStreamReader = new StreamReader(responseStream))
        {
            responseXml = responseStreamReader.ReadToEnd();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您是否看到/尝试了CloseConnectionGroup的<{3}}方法?

来自MSDN文档:

  

连接组将一组请求与特定请求相关联   连接或连接集。此方法删除并关闭所有   属于指定连接组的连接。

调用此方法可能会重置您的连接,而无需重新启动池。