Http请求在生产中超时,但未在开发中超时

本文关键字:超时 开发 中超 生产中 Http 请求 | 更新日期: 2023-09-27 17:58:21

下面是一个网站的示例,当从本地开发环境请求时,该网站返回ok,但当从生产服务器请求时,请求在15秒后超时。请求标头完全相同。有什么想法吗?

http://www.dealsdirect.com.au/p/wall-mounted-fish-tank-30cm/

Http请求在生产中超时,但未在开发中超时

除了我已经提供的其他东西之外,还有一件事我想指出。当您调用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,让我知道它的进展。