AsyncController处理一定数量的请求

问题描述:

我的web应用程序中的认证像SO一样工作。用户登录时,会向第3个网站启动后台请求以获取用户信息。像这样:AsyncController处理一定数量的请求

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工作的开发人员可以告诉我如何处理这个问题。

+0

在你发布的例子中,'AccountController'不是从任何东西派生。我猜这是一个错字。同样当你说'返回内容(“你好”)''也是有问题的,好吧,这很难相信。像这样的控制器操作可以处理许多请求。当我说很多时,我的意思是**很多**。所以问题在别的地方。 –

+0

@Darin Dimitrov:是的,这是一个错字,我编辑了这篇文章。感谢您的提示。 –

我不是很积极,但是您是否会遇到问题,因为您在下载实际完成之前处置了webclient实例?我认为.Dispose网络客户端的代码应该移入下载完成处理程序,或者完全忽略它,因为它将被垃圾回收清理。