gpt4 book ai didi

asp.net-mvc - 重载asp.net MVC + Web API应用和异步消息总线的设计注意事项

转载 作者:行者123 更新时间:2023-12-01 01:16:44 25 4
gpt4 key购买 nike

我计划构建一个相当大的应用程序(在并发用户/请求数量方面很大,而不是在功能方面)。

基本上,我将在某处提供服务,即等待命令执行它们,并在稍后确认完成。在发出确认消息之前,此服务将使用服务总线进行通信,从而使执行成为最终结果。

此服务的使用者可以是任何类型的应用程序(WPF、SL...),但我的主要(也是第一个)客户端将是一个 asp.net MVC 应用程序 + WebApi (.Net 4.5) 或仅 MVC (.Net 4.0) ) 与 ajax Controller 操作。

Web 应用程序将依靠 Ajax 调用来保持用户友好的响应式应用程序。

我对这种成熟的异步架构还很陌生,我有一些问题可以避免将来的头痛:

  • 我的 web api 调用可能需要一些时间。我应该如何正确设计 api 以支持长时间运行的操作(某种异步?)。我已经阅读了新的 async 关键字,但为了知识起见,我想了解背后的内容。
  • 我对服务的调用将包括发布一条消息并等待确认消息。如果我将它包装在一个方法中,我应该如何编写这个方法?我应该“阻止”直到收到确认(我想我不应该)?我应该返回一个 Task 对象并让消费者决定吗?
  • 我也想知道 SignalR 是否可以帮助我。使用signalR,我想我可以使用真正的“即发即弃”命令发出,并路由到客户端以确认消息。
  • 我是不是完全跑题了,我应该采取另一种方法吗?

  • 在实现细节/框架方面,我想我会使用:
  • Rabbitmq 作为消息系统
  • Masstransit 抽象消息系统
  • asp.MVC 4 构建 UI
  • Webapi 隔离从 UI Controller 发出的命令,并允许其他类型的客户端发出命令
  • 最佳答案

    my web api calls can take some amount of times. How should I design properly the api to support long running operations (some kind of async?). I've read about the new async keyword, but for the sake of knowledge, I'd like to understand what's behind.



    关于异步,我看到这个链接被推荐用于关于 stackoverflow 的另一个问题:

    http://msdn.microsoft.com/en-us/library/ee728598(v=vs.100).aspx

    它表示,当向 ASP .NET 应用程序发出请求时,会分配一个线程来处理来自有限线程池的请求。

    异步 Controller 操作将线程释放回线程池,以便它准备好接受额外的请求。在 Action 中,需要异步执行的操作被分配给回调 Controller Action 。

    异步 Controller 操作使用 Async 作为后缀命名,回调操作具有 Completed 后缀。
    public void NewsAsync(string city) {}
    public ActionResult NewsCompleted(string[] headlines) {}

    关于何时使用 Async:

    In general, use asynchronous pipelines when the following conditions are true:

    • The operations are network-bound or I/O-bound instead of CPU-bound.
    • Testing shows that the blocking operations are a bottleneck in site performance and that IIS can service more requests by using
      asynchronous action methods for these blocking calls.
    • Parallelism is more important than simplicity of code.
    • You want to provide a mechanism that lets users cancel a long-running request.


    我认为使用 ASP .NET MVC 和 Web API 开发您的服务并在需要时使用异步 Controller 将是开发高度可用的 Web 服务的好方法。

    使用像 ServiceStack 这样的基于消息的服务框架看起来也不错:

    http://www.servicestack.net/

    其他资源:

    http://msdn.microsoft.com/en-us/magazine/cc163725.aspx
    http://www.codethinked.com/net-40-and-systemthreadingtasks
    http://dotnet.dzone.com/news/net-zone-evolution
    http://www.aaronstannard.com/post/2011/01/06/asynchonrous-controllers-ASPNET-mvc.aspx
    http://channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/2287
    http://www.dotnetcurry.com/ShowArticle.aspx?ID=948//还显示了性能测试的设置
    http://www.asp.net/mvc/tutorials/mvc-4/using-asynchronous-methods-in-aspnet-mvc-4
    http://visualstudiomagazine.com/articles/2013/07/23/async-actions-in-aspnet-mvc-4.aspx
    http://hanselminutes.com/327/everything-net-programmers-know-about-asynchronous-programming-is-wrong
    http://www.hanselman.com/blog/TheMagicOfUsingAsynchronousMethodsInASPNET45PlusAnImportantGotcha.aspx

    关于asp.net-mvc - 重载asp.net MVC + Web API应用和异步消息总线的设计注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645102/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com