我的网络应用程序中的身份验证就像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工作的开发人员可以告诉我如何处理这个问题。
答案 0 :(得分:0)
我不是肯定的,但是你可能遇到问题,因为在实际下载之前你正在处理webclient实例吗?我认为.Dispose Web客户端的代码应该被移动到下载完成处理程序中,或者完全忽略它,因为它将被垃圾收集清理。