将 SignalR 与 Azure Service Fabric 结合使用

Using SignalR with Azure Service Fabric

微软提供的Service Fabric可以使用signalR吗?我正在尝试通过 signalR/websocket 连接将 UWP 应用程序和 angularJS 应用程序连接到托管在 Azure 集群中的无状态可靠服务。但是两者都无法打开这样的连接。在我的本地机器上一切正常。

将 signalR/websocket 与 Service Fabric 一起使用有什么特别需要考虑的吗?有例子吗?

您需要为 signalR 启用跨域设置才能从其他应用程序调用它。

 appBuilder.Map("/signalr", map =>
        {

            map.UseCors(CorsOptions.AllowAll);
            var hubConfiguration = new HubConfiguration()
            {
                EnableJSONP = true,
                EnableDetailedErrors = true,
                EnableJavaScriptProxies  = true
            };

            map.RunSignalR(hubConfiguration);
        });

此代码可以在我们为 SignalR 安装 Nuget 包后获得的 readme.txt 文件中找到。 对于跨域功能,您还需要安装Cores nuget包。

部署此应用程序后,您可以看到对 signalR 的一些调用失败,一些成功。 默认情况下,可靠无状态服务中的实例计数为 -1。因此将为该服务创建多个实例。

从 signaleR Connection.Start() 方法中调用三个 SingalR APIs。 这些调用应该在同一个会话中发生,以便正常工作。 当我们在具有多个实例的 Service Fabric 中调用这三个 API 时,调用可能会在不同的节点中处理,因此会在不同的会话中处理,从而导致 singalR 连接失败。

一种解决方案是使无状态服务结构应用程序的实例计数为 1。我不认为这是一个优雅的解决方案。

您需要将负载均衡器配置到客户端ip。然后用户将始终到达同一节点,而其他用户将到达其他节点。用户与节点的关系将是持久的。