SignalR背板与Azure Service Bus

时间:2017-03-30 15:20:55

标签: signalr azureservicebus signalr-backplane

我需要实现一个简单的工作者集群,它们会创建包含大量pdf的文件zip文件。该架构现在看起来像这样:

  1. 单个客户端(WebAPI + AngularJS)
  2. 执行工作的Hangfire服务器群集
  3. 一旦客户端要求新的zip文件,请求就会在Hangfire队列中排队。当群集中的某个节点空闲时,作业将启动。在执行作业期间,将通知客户端进度。由于集群,是必要的另一个组成部分:

    1. 处理工作人员与客户之间通信的所谓 SignalR背板
    2. 我使用Redis来实现这个组件,并且感谢一些NuGet包(即Microsoft.AspNet.SignalRMicrosoft.AspNet.SignalR.Redis)和这个doc这是非常简单的,我唯一需要的是在Owin启动文件中添加一些新行;一个为工人:

      public class WorkerStartup
      {
          public void Configuration(IAppBuilder app)
          {
             GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDB");
             GlobalHost.DependencyResolver.UseRedis("IP", 6379, String.Empty, "TOPIC");
      
             app.MapSignalR();
             app.UseHangfireServer();
          }
      }
      

      一个用于WebAPI,它们是等于但是Hangfire配置:

      public class ClientStartup
      {
          public void Configuration(IAppBuilder app)
          {
             GlobalConfiguration.Configuration.UseSqlServerStorage("HangFireDB");
             GlobalHost.DependencyResolver.UseRedis("IP", 6379, String.Empty, "TOPIC");
      
             app.MapSignalR();
             app.UseHangfireDashboard(); // The client only needs Hangfire dashboard
          }
      }
      

      它就像一个魅力,Redis做得很好。我会尝试使用Azure Service Bus重新实现所有内容(基于链接here),我将包Microsoft.AspNet.SignalR.Redis替换为Microsoft.AspNet.SignalR.ServiceBus并替换为UseRedis行,如:

      GlobalHost.DependencyResolver.UseServiceBus("Endpoint=sb://XXX.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXX", "TOPIC");
      

      但是,一旦我开始客户端/服务器通信,我得到:

        

      无法成功初始化传输。尝试指定一个   不同的传输或根本不用于自动初始化。"

      什么错了,应该没有问题......

1 个答案:

答案 0 :(得分:1)

  

无法成功初始化传输。尝试指定不同的传输或根本不指定自动初始化。

要解决此问题,您可以enable tracing and log on your hub,您可以在浏览器控制台标签中查看您的应用程序正在使用哪种传输。

$.connection.hub.logging = true;

然后,您可以尝试在启动客户端连接时显式指定其他传输,并测试它是否有效。

$.connection.hub.start({ transport: 'specify transport that you want' })

目前,支持以下传输:

  • WebSockets
  • 服务器已发送
  • 事件永远帧(仅限Internet Explorer)
  • Ajax long polling