9

我有一个 ASP.NET Web API 服务器,它必须与不同平台上的不同应用程序进行通信。现在我想创建一个类似于回调的方法:客户端应用程序订阅它并等待服务器触发消息。

示例: 许多用户都在等待新产品上架——他们订阅了这个“事件”。当产品到达商店时 - 每个客户都会收到一条消息,在某些情况下必须对其进行处理。

  1. 用户发送请求“订阅”
  2. 服务器收到请求“产品可用!”
  3. 服务器向每个用户发送一条包含产品详细信息的消息。
  4. 用户的应用程序处理消息

我试图在 ASP.NET Web API 中找到一些关于回调或双工的信息,但有一个建议——最好使用 WCF 来实现这种方法。

解决方案

  • 在每个客户端应用程序中创建类似计时器的东西,每 N 秒发送一个请求“产品可用吗?” 直到得到“假”。当响应为真时 - 发送消息“获取产品详细信息”。这会导致大量流量,如果有很多客户使用这些计时器 - 这将是一件坏事,不是吗?
  • 创建一个小型回调服务器(可能是 WCF)。但在这种情况下,该服务器与不同平台上的应用程序之间的通信会出现很多问题。
  • 也许在 ASP.NET Web API 中有一些我错过的解决方案。

如果您对我如何解决这个问题有一些想法,请给我一个建议。

感谢帮助。

4

1 回答 1

11

看起来您想要来自服务器的推送通知 - 在这种情况下,可以通过将 SignalR 与 Web API 结合来实现。

布拉德威尔逊有一个很好的例子:

  1. 代码在这里 - https://github.com/bradwilson/WebstackOfLove

  2. NDC 奥斯陆谈话解释了这一切 - http://vimeo.com/43603472

简而言之,每当您向 Web API 添加新项目时,您都可以通知所有已连接(订阅)的客户端:

public void PostNewItem(ToDoItem item)
        {
            lock (db)
            {
                // Add item to the database
                db.Add(item);

                // Notify the connected clients
                Hub.Clients.processItem(item);
            }
        }

SignalR 将调用processItem客户端上的函数。

或者,您可能想研究 JavaScript SSE 和 Web API PushStreamContent,但它们的级别要低得多,而且 SignalR 为您抽象了很多此类东西,因此处理起来可能更复杂。

我在这里写了关于这种方法的博客http://www.strathweb.com/2012/05/native-html5-push-notifications-with-asp-net-web-api-and-knockout-js/

于 2013-01-06T17:37:57.200 回答