Вот одна вещь, которую я хочу указать помимо того, что я уже предоставил. Когда вы вызываете 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;
}
Попробуйте это Адриан и дайте мне знать, как оно идет.