Аутентификация в моем веб-приложении работает как SO. Когда пользователь входит в систему, на третий веб-сайт запускается фоновый запрос для получения информации о пользователе. Примерно так:
public AccountController : AsyncController
{
public void LogonAsync()
{
using(WebClient client = new WebClient())
{
client.DownloadDataCompleted += (sender, args) =>
{
//do something
AsyncManager.OutstandingOperations.Decrement();
};
AsyncManager.OutstandingOperations.Increment();
client.DownloadDataAsync(new Uri(theUrlToValidate));
}
}
public ActionResult LogonCompleted()
{
//do something
}
}
Это выглядит правильно. Но когда веб-приложение подключается к сети, я вижу из монитора производительности, что запросы в очереди становятся все больше и больше, а затем пул приложений не работает. Я изменил действие, чтобы оно возвращало постоянную строку:
public ActionResult Logon()
{
return Content("hello");
}
Но, тем не менее, это не может предотвратить разрушение приложения растущими запросами. Теперь я хочу знать: (1) Правильно ли реализован мой асинхронный контроллер? Сбой происходит не из-за неправильного кода, а из-за количества запросов, верно? (2) Как улучшить производительность, когда приходит много запросов? В настоящее время у меня есть два веб-сервера с WIN SERVER 2003, веб-приложение построено на MongoDB / ASP.NET MVC 3. Может быть, разработчики, работающие на SO, могут рассказать мне, как SO справляется с этой проблемой.