signalr – c#代码中的Call Hub方法

这是我的中心码:
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);

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...