2017-05-09 69 views
0

设置SignalR以使用Azure服务总线时,我必须丢失一些东西。我有我的应用程序服务(API - Web API 2)设置运行3个常量实例(当前),启动时,API使用服务总线连接字符串并设置适当的主题前缀。SignalR通过Azure服务总线

在前端,SignalR能够连接到我的API,但消息有时只能由客户端接收。我的假设是,客户端只接收来自它最初连接的服务器的消息。这导致我相信SignalR没有正确使用服务总线。当通过Azure查看服务总线时,我确实看到正在创建主题,但其中没有任何消息(我也看到了订阅)。

所以,据我所知,客户端和服务器之间的SignalR仍然使用直接连接,而不是通过服务总线。请注意,客户端正在使用API​​的URL用于SignalR连接 - 这是正确的吗?

SignalRConfig(在应用程序启动时。)

var serviceBusConnectionString = configHelper.SignalR.ServiceBusConnectionString; 
var serviceBusTopicPrefix = configHelper.SignalR.TopicPrefix; 

Logger.Info("SignalR: configuring"); 

// Use the service bus, if specified. 
if (serviceBusConnectionString != null && serviceBusTopicPrefix != null) { 
    Logger.Info("SignalR: using service bus"); 

    GlobalHost.DependencyResolver.UseServiceBus(serviceBusConnectionString, serviceBusTopicPrefix); 
} 

app.MapSignalR(); 

上面的代码运行的每个实例,我不知道这是否正确与否。也许这就是为什么我看到多个主题,例如signalr_topic_my-app-staging_0 - 0到5

请注意,我试图按照这个(过时)教程:https://docs.microsoft.com/en-us/aspnet/signalr/overview/performance/scaleout-with-windows-azure-service-bus

+0

您使用哪个nuget软件包?本教程中的nuget包已被弃用。您应该使用Microsoft.AspNet.SignalR.ServiceBus – Thomas

+0

最新的'Microsoft。*。SignalR *',可以提供具体信息,如果需要的话,我会回到我的电脑前。 –

回答

0

Your're代码似乎是正确的,它应该为每个实例运行。

服务总线应该有6个主题:signalr_topic_ {TOPIC_PREFIX} _0到signalr_topic_ {TOPIC_PREFIX} _5。

是否每个实例使用相同的主题前缀名称?如果他们使用不同的主题名称,那么这将解释您所看到的行为。

+0

他们使用相同的主题名称作为实例自动缩放/精确副本。我在客户端上使用了正确的URL吗? –