AsyncController для обработки количества запросов - PullRequest
1 голос
/ 29 августа 2011

Аутентификация в моем веб-приложении работает как 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 справляется с этой проблемой.

1 Ответ

0 голосов
/ 20 декабря 2011

Я не уверен, но у вас могут быть проблемы, потому что вы удаляете экземпляр webclient до того, как загрузка действительно будет завершена? Я думаю, что код веб-клиента .Dispose следует перенести в обработчик завершения загрузки или просто полностью его игнорировать, так как он будет очищен сборщиком мусора.

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