【问题标题】:AsyncController to process a quantity of requestsAsyncController 处理大量请求
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 2021-02-11
    • 2015-04-29
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多