【问题标题】:Http Requests Timing Out in Production but not DevHttp 请求在生产中超时但不是在开发中
【发布时间】:2011-06-05 06:54:51
【问题描述】:

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

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

【问题讨论】:

  • 生产服务器是否与不同的后端通信? (例如不同的数据库或类似的)。
  • 没有真实信息只能猜测一些可以做到。首先检查您没有在调试模式下运行它。其次检查您的事件查看器是否有错误。
  • 感谢您的帮助,但我不确定我是否理解您的问题以及它与我的问题的关系。开发服务器与我的开发数据库对话,我的生产服务器与生产数据库对话。但是数据库与这个问题无关,对吧?这是两个服务器之间的通信问题。我应该添加这个网站是与我们的服务器不同的服务器。
  • stackoverflow.com/questions/6028051/… 这是同一个问题我同意,这是一个模糊的问题,但想知道是否有人有同样的问题

标签: c# asp.net iis-7


【解决方案1】:

除了我已经提供的其他内容之外,我还想指出一件事。当您调用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 开发服务器还是 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;
}

试试这个阿德里安,让我知道它是怎么回事。

【讨论】:

  • stackoverflow.com/questions/6028051/… 这是同一个问题我同意,这是一个模糊的问题,但想知道是否有人有同样的问题。在开发中使用 IIS
  • 立即想到一件事,您可能遇到代理服务器出现问题?它说的是它无法建立连接,因为它超时(如果连接被阻止,就会发生这种情况),这可能是出于安全原因或代理原因而发生的。我有一个你可能想试试的 sn-p,我要去挖掘它。
  • 我们在连接远程服务器时不时遇到问题,但在开发和持续集成环境中一切正常。但此请求在 prod 和 ci 中失败。
  • 开发人员环境通常限制较少,它可能是访问权限/代码级别的安全性。至少可以说很多事情。执行请求的代码看起来如何?这些环境之间有什么区别吗?
  • 是的,如果实例不为空,using 语句只是带有调用 Dispose 的 try-finally 块的简写符号。但不要将同一个实例传递给多个 using 语句。它会编译并且不会崩溃,但在您将其设置为之前处理对象时,它可能会导致不良影响。
猜你喜欢
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多