使用SignalR和Azure Service Fabric

5

是否可以在由Microsoft提供的Service Fabric中使用SignalR?我正在尝试通过SignalR/Websocket连接将UWP应用程序和AngularJS应用程序连接到我的可靠无状态服务,该服务托管在Azure集群中。但是两者都无法打开此类连接。在我的本地计算机上一切正常。

在使用SignalR/Websocket与Service Fabric时需要特别注意什么?有没有示例?


你为什么创建了两个几乎相同的问题?请选择一个... - Mikhail Shilkov
请查看此背板。如果有帮助,我会很高兴。 - Venkatesh
请参考此链接:http://stackoverflow.com/questions/39649027/setup-signalr-and-service-bus-inside-a-azure-service-fabric-service/40525730#40525730。如果这对您有用,我会很高兴。 - Venkatesh
我知道这是一个老问题,但我为使用Actor事件来扩展SignalR制作了一个库。 "尽力而为"对于预期的用途并不会困扰我! 这里有演示,文档和源代码:https://github.com/olivergrimes/servicefabric-topicactor-signalr。 - Oliver
2个回答

6

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


好观点,Kevin。你能提供一些更详细的信息,关于如何在负载均衡中实现将客户端IP映射到服务主机吗?(我对Azure非常陌生) 另外,你会建议如何处理用户IP变化吗? - Igor Soloydenko
这篇stackoverflow文章给出了一个很好的使用负载均衡器的例子。我们尝试了一下,它起作用了。链接 - Shaun
我遇到了以下错误。您使用的是siganlr.core还是2.2版本???不健康事件:SourceId='System.RA',Property='ReplicaOpenStatus',HealthState='Warning',ConsiderWarningAsError=false。在_Node_0上打开副本期间出现多个故障。API调用:IStatelessServiceInstance.Open(); 错误=System.Reflection.TargetInvocationException(-2146232828)目标的调用引发了异常。在System.RuntimeMethodHandle.InvokeMethod(Object target,Object [] arguments,Signature sig,Boolean constructor)中 - indra257
@kevin 我正在使用的是 Nginx 而不是 Nginx Plus。有没有什么方法可以处理它? - indra257

5
您需要为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 API。这些调用应在同一会话中进行,才能正常工作。当我们在具有多个实例的Service Fabric中调用这三个API时,此调用可能在不同的节点和不同的会话中处理,从而导致SingalR连接失败。

其中一个解决方案是将无状态服务应用程序的实例计数设置为1。但我认为这并不是一个优雅的解决方案。


我遇到了以下错误。您使用的是siganlr.core还是2.2版本???不健康事件:SourceId='System.RA',Property='ReplicaOpenStatus',HealthState='Warning',ConsiderWarningAsError=false。在_Node_0上打开副本期间出现多个故障。API调用:IStatelessServiceInstance.Open(); 错误=System.Reflection.TargetInvocationException(-2146232828)目标调用引发了异常。 在System.RuntimeMethodHandle.InvokeMethod(Object target,Object [] arguments,Signature sig,Boolean constructor)中 - indra257
我想我正在使用SignalR 2.*版本。我相信你正在使用无状态服务。你在本地机器上调试时是否遇到了这个错误? - Binu Vijayan
当我使用WebSocket时,我会得到错误信息:"Error during WebSocket handshake: Unexpected response code: 204"。但是当我使用SSE时,一切都正常。 - indra257

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接