【发布时间】:2011-08-29 06:47:56
【问题描述】:
我的 Web 应用程序中的身份验证工作方式类似于 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
}
}
看起来是正确的。但是当 Web 应用上线时,我可以从性能监视器中看到,排队的请求越来越大,然后应用程序池就关闭了。我修改了动作,返回常量字符串:
public ActionResult Logon()
{
return Content("hello");
}
但它仍然无法阻止应用程序因请求增长而崩溃。现在我想知道:(1)我的异步控制器是否正确实现?崩溃不是因为代码错误,而是请求数量,对吧? (2) 大量请求时如何提高性能?目前我有两台使用 WIN SERVER 2003 的 Web 服务器,Web 应用程序是基于 MongoDB/ASP.NET MVC 3 构建的。也许为 SO 工作的开发人员可以告诉我 SO 是如何处理这个问题的。
【问题讨论】:
-
在您发布的示例中,
AccountController并非源自任何东西。我想这是一个错字。此外,当您说return Content("hello");也有问题时,很难相信。像这样的控制器操作可以处理许多请求。当我说很多时,我的意思是 MANY。所以问题出在其他地方。 -
@Darin Dimitrov:是的,这是一个错字,我编辑了这篇文章。感谢您的提示。
标签: c# asp.net-mvc asp.net-mvc-3