【问题标题】:Is it a bad practice to do WebRequests from ASP.NET MVC app?从 ASP.NET MVC 应用程序执行 WebRequests 是一种不好的做法吗?
【发布时间】:2013-05-02 21:55:30
【问题描述】:

我正在做一个在 Windows Azure 中运行/部署的 Web 应用程序 (ASP.NET MVC)。

如果我从这个应用程序中执行大量 WebRequest,这是一种不好的做法吗?,即:

ActionResult SomeAction()
{
      WebRequest.Create(some url);

       ....
}

SomeAction 被调用了很多次。此外,SomeAction 可能会创建多达 100 个 WebRequest,甚至更多。

这是一种不好的做法吗?
我应该改用 Windows 服务吗?即:

ActionResult SomeAction()
{
      //Save the request in a db and let a Windows Service to poll this db
      //and do the WebRequests from outside the MVC application
}

【问题讨论】:

  • “很多次”是什么意思?你可以同时拥有多少个 SomeAction?他们是什么类型的电话?
  • 您所做的事情本身并没有错。但是,带有处理请求的 Windows 服务的队列肯定会让您更好地管理吞吐量。例如,如果SomeAction 的调用频率高于网站的处理能力,会发生什么情况?您对某些“丢失”的请求是否满意?该决定取决于实际的预期负载以及您是否可以扩展来处理它。
  • 我同意其他人的观点。如果这是一个面向用户的应用程序,这将是一个令人不快的页面。如果这是内部临时使用的东西,那么这样的东西可能没问题。最终,如果你想扩大规模,那么你应该遵循@mellamokb 的建议,将你的 100 个作业排队并返回给用户,并有一些流程来监控这 100 个作业的状态。

标签: asp.net-mvc azure windows-services httpwebrequest webrequest


【解决方案1】:

在您的项目强制执行之前,这不是一个坏习惯。

顺便说一句,您可以使用以下最佳实践来包装远程调用:

  1. 如果远程 url 中的数据不经常更改,您可以缓存结果,避免多次 Web 请求
  2. 使用异步等待方法(如果您使用 .NET 4.5)执行异步 Web 请求并为您的应用程序提供更好的性能

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多