我和我的应用程序一起在IIS中托管SignalR,而我的远程客户端可以愉快地连接,但我无法获得创建集线器的应用程序来连接并可靠地参与其中。
我尝试从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);
当主机作为有效对象返回时,我调用的客户端功能似乎无法通过,我无法在该对象上看到任何客户端。
答案 0 :(得分:0)
最后我错过了一个关键点。我不再在内部连接到我自己的集线器,因为当我需要知道时,回调会打电话给我。
最后调用客户端函数我试图调用集线器函数Update()而不是客户端函数heartbeat()。