1

我们有一个 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();
        }
    }
}
4

1 回答 1

1

您是否看过/尝试过ServicePoint 类的CloseConnectionGroup方法?

从 MSDN 文档:

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

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

于 2013-04-18T21:13:11.397 回答