ASP.NET Web API中的回调方法

时间:2013-01-06 17:22:14

标签: asp.net-web-api

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

示例: 许多用户都在等待新产品在商店中出售 - 他们订阅了这个“活动”。当产品到达商店时 - 每个客户都会收到一条消息,在某些情况下必须处理。

  1. 用户发送请求“订阅”
  2. 服务器收到“产品可用!”的请求。
  3. 服务器向每个用户发送包含产品详细信息的消息。
  4. 用户的应用程序处理消息
  5. 我试图在ASP.NET Web API中找到有关回调或双工的一些信息,但是一个建议 - 最好使用WCF来实现这种方法。

    解决方案

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

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

    感谢您的帮助。

1 个答案:

答案 0 :(得分:11)

您希望从服务器获取推送通知 - 在这种情况下,可以通过将SignalR与Web API相结合来实现推送通知。

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

  1. 此处的代码 - https://github.com/bradwilson/WebstackOfLove

  2. NDC奥斯陆谈话解释所有这些 - http://vimeo.com/43603472

  3. 简而言之,每当您向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/