Http запрашивает сроки в производстве, но не Dev - PullRequest
0 голосов
/ 05 июня 2011

Ниже приведен пример веб-сайта, который при запросе из моей локальной среды разработки возвращается нормально, но при запросе с рабочего сервера запрос истекает через 15 секунд.Заголовки запроса точно такие же.Есть идеи?

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

1 Ответ

1 голос
/ 05 июня 2011

Вот одна вещь, которую я хочу указать помимо того, что я уже предоставил. Когда вы вызываете GetResponse, возвращаемый объект должен быть удален как можно скорее. В противном случае произойдет остановка или, скорее, следующий вызов будет заблокирован и, возможно, истечет время ожидания, поскольку существует ограничение на количество запросов, которые могут одновременно обрабатываться механизмом HTTP-запросов в System.Net.

// 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;
}

Попробуйте это Адриан и дайте мне знать, как оно идет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...