这是我的中心码:
public class Pusher : Hub,IPusher { readonly IHubContext _hubContext = GlobalHost.ConnectionManager.GetHubContext<Pusher>(); public virtual Task PushToOtherInGroup(dynamic group,dynamic data) { return _hubContext.Clients.Group(group).GetData(data); } }
var pusher = new Pusher.Pusher(); pusher.PushToOtherInGroup("Test",new {exchangeTypeId,price});
我想调用PushToOtherInGroup,当调用方法我没有得到任何错误,但是推动器不起作用.
这是我的Ui代码:
$(function() { hub = $.connection.pusher; $.connection.hub.start() .done(function() { hub.server.subscribe('newPrice'); console.log('Now connected,connection ID=' + $.connection.hub.id); }) .fail(function() { console.log('Could not Connect!'); }); }); (function() { hub.client.GetData = function (data) { debugger; }; });
我的问题是什么?
解决方法
你不能像这样直接实例化和调用一个hub类.通过SignalR运行时,在Hub类周围提供了很多管道,您可以通过将其用作像这样的“普通的类”来绕过.
从外部与SignalR集线器交互的唯一方法是实际获取代表从SignalR运行时的集线器的IHubContext的实例.您只能在同一个过程中执行此操作,因此只要您的其他“项目”正在运行,并使用SignalR代码即可.
如果您的另一个项目将在另一个进程中运行,那么您想要做的就是暴露出一种“伴侣”API,它是另一个SignalR集线器或一个常规的旧Web服务(使用ASP.NET Web API),您可以可以从这个其他应用程序调用来触发你想要的行为.无论您选择哪种技术,您都可能希望确保这一点,以便只有经过身份验证的应用程序可以调用它.
一旦您决定要采取哪种方式,您将通过Pusher hub发送消息的所有操作将是:
// Get the context for the Pusher hub IHubContext hubContext = GlobalHost.ConnectionManager.GetHubContext<Pusher>(); // Notify clients in the group hubContext.Clients.Group(group).GetData(data);