将SignalR与Azure Service Fabric一起使用

CPA*_*CPA 5 c# azure websocket signalr azure-service-fabric

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

使用带有Service Fabric的signalR/websockets有什么特别的考虑吗?有什么例子吗?

Bin*_*yan 5

您需要为signalR启用跨域设置以从其他应用程序调用它.

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

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

            map.RunSignalR(hubConfiguration);
        });
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


小智 5

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