【问题标题】:Using SignalR with Azure Service Fabric将 SignalR 与 Azure Service Fabric 结合使用
【发布时间】:2016-05-17 19:16:38
【问题描述】:

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

在 Service Fabric 中使用 signalR/websockets 有什么特别需要考虑的吗?有例子吗?

【问题讨论】:

  • 为什么你创建了两个几乎相同的问题?选择一个...
  • 看看这个Backplane。如果有帮助,我会很高兴。
  • 请参阅此link。如果这对你有用,我会很高兴。
  • 我知道这是一个老问题,但我创建了一个库,用于使用 Actor Events 来横向扩展 SignalR。 “尽力而为”并没有因为预期的用途而打扰我!有一个演示、文档和源代码here

标签: c# azure websocket signalr azure-service-fabric


【解决方案1】:

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

【讨论】:

  • 好点凯文。您能否提供更多关于如何将客户端 IP 映射到 LB 中的服务主机的详细信息? (我是 Azure 的新手)另外,您建议如何处理用户 IP 更改?
  • 这篇 stackoverflow 文章提供了一个很好的例子来说明如何使用负载均衡器。我们试过了,它奏效了。 link
  • 我收到以下错误。使用的是 siganlr.core 还是 2.2??? version.Unhealthy 事件:SourceId='System.RA'、Property='ReplicaOpenStatus'、HealthState='Warning'、ConsideWarningAsError=false。副本在 _Node_0 上打开期间出现多次故障。 API 调用:IStatelessServiceInstance.Open(); Error = System.Reflection.TargetInvocationException (-2146232828) 调用目标已引发异常。在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at
  • @kevin 我使用的是 ngnix 而不是 ngnix plus。有办法处理吗?
【解决方案2】:

您需要启用跨域设置,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??? version.Unhealthy 事件:SourceId='System.RA'、Property='ReplicaOpenStatus'、HealthState='Warning'、ConsideWarningAsError=false。副本在 _Node_0 上打开期间出现多次故障。 API 调用:IStatelessServiceInstance.Open(); Error = System.Reflection.TargetInvocationException (-2146232828) 调用目标已引发异常。在 System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at
  • 我想我使用的是 signalr 2.* 版本。我相信您使用的是无状态服务。您在本地机器上调试时是否遇到此错误?
  • 当我使用 websockets 时,我在 WebSocket 握手期间收到错误:意外的响应代码:204。但是当我使用 SSE 时它工作正常。
猜你喜欢
  • 2016-07-23
  • 2019-11-30
  • 2018-07-09
  • 2017-01-27
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 2017-05-28
  • 2015-09-17
相关资源
最近更新 更多