我们有一个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();
}
}
}
答案 0 :(得分:1)
您是否看到/尝试了CloseConnectionGroup的<{3}}方法?
来自MSDN文档:
连接组将一组请求与特定请求相关联 连接或连接集。此方法删除并关闭所有 属于指定连接组的连接。
调用此方法可能会重置您的连接,而无需重新启动池。