是否可以在由Microsoft提供的Service Fabric中使用SignalR?我正在尝试通过SignalR/Websocket连接将UWP应用程序和AngularJS应用程序连接到我的可靠无状态服务,该服务托管在Azure集群中。但是两者都无法打开此类连接。在我的本地计算机上一切正常。
在使用SignalR/Websocket与Service Fabric时需要特别注意什么?有没有示例?
是否可以在由Microsoft提供的Service Fabric中使用SignalR?我正在尝试通过SignalR/Websocket连接将UWP应用程序和AngularJS应用程序连接到我的可靠无状态服务,该服务托管在Azure集群中。但是两者都无法打开此类连接。在我的本地计算机上一切正常。
在使用SignalR/Websocket与Service Fabric时需要特别注意什么?有没有示例?
您需要将负载均衡器配置为客户端IP。然后用户将始终访问同一节点,其他用户将访问其他节点。用户与节点的关系将是持久的。
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。但我认为这并不是一个优雅的解决方案。