AsyncController处理大量请求

时间:2011-08-29 06:47:56

标签: c# asp.net-mvc asp.net-mvc-3

我的网络应用程序中的身份验证就像SO一样。当用户登录时,会向第3个网站启动后台请求以获取用户的信息。像这样:

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

看起来很正确。但是当Web应用程序上线时,我可以从性能监视器看到排队的请求越来越大,然后应用程序池就会关闭。我修改了动作,返回常量字符串:

public ActionResult Logon()
{
    return Content("hello");
}

但它仍然不能阻止应用程序破坏增长请求。现在我想知道:(1)我的异步控制器是否正确实现?崩溃不是因为错误的代码,而是请求的数量,对吧? (2)当有大量请求到来时如何提高性能?目前我有两个带WIN SERVER 2003的Web服务器,Web应用程序是基于MongoDB / ASP.NET MVC 3.也许为SO工作的开发人员可以告诉我如何处理这个问题。

1 个答案:

答案 0 :(得分:0)

我不是肯定的,但是你可能遇到问题,因为在实际下载之前你正在处理webclient实例吗?我认为.Dispose Web客户端的代码应该被移动到下载完成处理程序中,或者完全忽略它,因为它将被垃圾收集清理。