Http请求在生产中超时,但未在开发中超时
本文关键字:超时 开发 中超 生产中 Http 请求 | 更新日期: 2023-09-27 17:58:21
下面是一个网站的示例,当从本地开发环境请求时,该网站返回ok,但当从生产服务器请求时,请求在15秒后超时。请求标头完全相同。有什么想法吗?
http://www.dealsdirect.com.au/p/wall-mounted-fish-tank-30cm/
除了我已经提供的其他东西之外,还有一件事我想指出。当您调用GetResponse
时,必须尽快处理返回的对象。否则将发生停滞,或者更确切地说,下一个调用将被阻塞并可能超时,因为System.Net.
中可以同时通过HTTP请求引擎的请求数量有限制
// The request doesn't matter, it's not holding on to any critical resources
var request = (HttpWebRequest)WebRequest.Create(url);
// The response however is, these will eventually be reclaimed by the GC
// but you'll run into problems similar to deadlocks if you don't dispose them yourself
// when you have many of them
using (var response = request.GetResponse())
{
// Do stuff with `response` here
}
这是我的老答案
如果不了解更多细节,这个问题真的很难回答。IIS没有理由会这样做,这让我得出结论,这个问题与你的应用程序正在做的事情有关,但我对此一无所知。如果你能在附加调试器的情况下重现这个问题,你可能能够跟踪问题发生的位置,但如果你不能先这样做,那么我几乎无能为力。
您在开发中使用的是ASP.NET Development Server还是IIS Express?
如果这是代理的问题,这里有一个工厂方法,我用来设置HTTP请求,要求代理需要一些身份验证(不过,我不相信我曾经收到过超时):
HttpWebRequest CreateRequest(Uri url)
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 120 * 1000;
request.CookieContainer = _cookieContainer;
if (UseSystemWebProxy)
{
var proxy = WebRequest.GetSystemWebProxy();
if (UseDefaultCredentials)
{
proxy.Credentials = CredentialCache.DefaultCredentials;
}
if (UseNetworkCredentials != null
&& UseNetworkCredentials.Length > 0)
{
var networkCredential = new NetworkCredential();
networkCredential.UserName = UseNetworkCredentials[0];
if (UseNetworkCredentials.Length > 1)
{
networkCredential.Password = UseNetworkCredentials[1];
}
if (UseNetworkCredentials.Length > 2)
{
networkCredential.Domain = UseNetworkCredentials[2];
}
proxy.Credentials = networkCredential;
}
request.Proxy = proxy;
}
return request;
}
试试这个Adrian,让我知道它的进展。