【问题标题】:Push notification from an ASP.Net server来自 ASP.Net 服务器的推送通知
【发布时间】:2013-05-26 17:06:44
【问题描述】:

我有一个执行某些操作的 Web 服务。当事件发生时,我想通知客户。我遇到的问题是我能够从客户端连接到服务器,但不能反过来,因为客户端恰好位于 NAT(路由器)后面。目前,我每分钟都会请求检查通知。如果我有一种技术可以更快地通知客户,而不必提出这么多不必要的请求,那就太好了。

注意: 客户端是一个 c# 控制台应用程序,服务器是一个 asp.net 网站。

(请注意,如果服务器上发生事件,我会通知所有客户端)

【问题讨论】:

  • ASMX 是一项遗留技术,不应用于新开发。 WCF 应该用于 Web 服务客户端和服务器的所有新开发。一个提示:Microsoft 已停用 MSDN 上的 ASMX Forum。最后,ASMX 没有能力通知。
  • 阅读“长轮询”。本质上:您有一个轮询请求正在运行,它在服务器上等待直到超时(例如 30 秒)或事件。然后立即开始另一个投票。
  • 看看这个:Comet
  • 我建议看看微软自己的库。 SignalR 它抽象出服务器和客户端之间的实时数据通道,并使用 4 种可能的技术中最有效的传输协议(包括但不限于“长轮询”)

标签: asp.net push-notification


【解决方案1】:

使用 SignalR。这是 Microsoft 用于抽象出实时服务器-客户端连接的新库,如果您的设置允许,它支持新的 WebSockets 协议。

Taken from asp.net website. The Client Code

var hubConnection = new HubConnection("http://www.contoso.com/");
IHubProxy stockTickerHubProxy = hubConnection.CreateHubProxy("StockTickerHub");
stockTickerHubProxy.On<Stock>("UpdateStockPrice", 
    stock => Console.WriteLine("Stock update for {0} new price {1}", stock.Symbol, stock.Price));
await hubConnection.Start();

【讨论】:

  • SignalR 很棒,但您需要考虑与不支持 WebSockets 的旧浏览器的向后兼容性。
  • @GregDzezinski 微软的好人已经这样做了。 I will let another SOer explain...
  • @GregDzezinski OP 还声明客户端是 C#,因此不是浏览器。
  • 谢谢@Aron。我的评论有误。我想补充一点,SignalR 本身被宣传为不支持或在较旧的浏览器版本中进行了测试。
猜你喜欢
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多