SignalR从服务器的其他地方访问集线器



我将SignalR与我的应用程序一起托管在IIS中,虽然我的远程客户端可以愉快地连接,但我无法获得创建了集线器以可靠地连接和参与的应用程序。

我曾尝试从web服务器进程内连接到集线器,这是成功的,但前提是我知道它托管在哪个端口上。由于可以从IIS配置为任何端口,所以我不知道该尝试在内部连接到哪个端口。

我曾希望我能利用IHubContext,但这似乎只是给了我发送信息而不是接收信息的方法。

我觉得我错过了一些显而易见的东西。

--编辑--

我已经开始了我的实验,但现在我遇到了另一堵砖墙。

我正在像这个一样设置我的集线器

GlobalHost.DependencyResolver.Register(typeof(StatusHub), () => this.StatusHub);

这样,我就可以拥有集线器的一个实例,并从我的服务器内部(但在集线器本身外部)连接到它上的事件。

然后我可以利用的几个事件

public event EventHandler<string> Connected;
public event EventHandler<string> Disconnected;

然后

this.statusHub.Connected += (sender, connectionId) => this.UpdateServerStatus(connectionId);
this.statusHub.Disconnected += (sender, connectionId) => this.ReleaseLicense(connectionId);

当集线器对进行过度调用时,当客户端连接和断开连接时,这些函数就会被调用

public override Task OnConnected()

public override Task OnDisconnected(bool stopCalled)

然后我似乎无法实际使用集线器向客户端发送消息。我试过做这个

var host = GlobalHost.ConnectionManager.GetHubContext<StatusHub>();
host.Clients.All.Update(args);

当主机作为一个有效的对象返回时,我调用它的客户端函数似乎无法通过,我在对象上看不到任何客户端。

最后我错过了一个关键点。我不再在内部连接到自己的集线器,因为回调会在我需要知道的时候给我打电话。

最后调用客户端函数时,我试图调用集线器函数Update(),而不是客户端函数heartbeat()。

最新更新