ASP.NET Web API中的回调方法

Iho*_*kov 8 asp.net-web-api

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

示例: 许多用户都在等待新产品在商店中可用 - 他们订阅此"事件".当产品到达商店时 - 每个客户都会收到一条消息,在某些情况下必须处理.

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

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

解决方案

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

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

感谢帮助.

Fil*_*p W 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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

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/