你的位置:首页 > ASP.net教程

[ASP.net教程]SignalR主动通知订阅者示例


html代码:

<script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script><script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script><script>  $(function () {    var hub = $.connection.payHub;    hub.client.waitNotify = function (tran, url) {      console.log("waitNotify:" + tran + "  " + url);      if (tran) {        location.href = url;      }    };    $.connection.hub.start().done(function () {      console.log("hub done");    });  })</script>

hub代码:

[HubName("payHub"), Authorize]  public class payHub : Hub  {    public static Dictionary<Guid, string> userPayHub = new Dictionary<Guid, string>();    public static void Notify(Guid userId, string redirectUrl)    {      if (userPayHub.ContainsKey(userId))      {        Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<Hubs.payHub>()          .Clients.Client(Hubs.payHub.userPayHub[userId])          .waitNotify(true, redirectUrl);      }    }    public override Task OnConnected()    {      var uid = this.Context.User.Identity.GetUserId();      userPayHub[uid] = this.Context.ConnectionId;      return base.OnConnected();    }    public override Task OnDisconnected(bool stopCalled)    {      var uid = this.Context.User.Identity.GetUserId();      userPayHub.Remove(uid);      return base.OnDisconnected(stopCalled);    }    public override Task OnReconnected()    {      var uid = this.Context.User.Identity.GetUserId();      userPayHub.Remove(uid);      return base.OnReconnected();    }  }

通知调用Notify方法即可。

关键点:GlobalHost.ConnectionManager.GetHubContext