Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Signalr 带Azure服务总线的信号器背板_Signalr_Azureservicebus_Signalr Backplane - Fatal编程技术网

Signalr 带Azure服务总线的信号器背板

Signalr 带Azure服务总线的信号器背板,signalr,azureservicebus,signalr-backplane,Signalr,Azureservicebus,Signalr Backplane,我需要实现一个简单的工作集群,创建包含大量pdf的文件zip文件。目前的体系结构如下所示: 单个客户端(WebAPI+AngularJS) 执行此工作的Hangfire服务器集群 一旦客户端请求一个新的zip文件,该请求就会进入Hangfire队列。当集群中的一个节点空闲时,作业将启动。在作业执行期间,将通知客户进度。由于集群,需要另一个组件: 一种所谓的,信号机背板,用于处理工人和客户之间的通信 我使用Redis来实现这个组件,多亏了一些NuGet软件包(即Microsoft.AspNet.s

我需要实现一个简单的工作集群,创建包含大量pdf的文件zip文件。目前的体系结构如下所示:

  • 单个客户端(WebAPI+AngularJS)
  • 执行此工作的Hangfire服务器集群
  • 一旦客户端请求一个新的zip文件,该请求就会进入Hangfire队列。当集群中的一个节点空闲时,作业将启动。在作业执行期间,将通知客户进度。由于集群,需要另一个组件:

  • 一种所谓的,信号机背板,用于处理工人和客户之间的通信
  • 我使用Redis来实现这个组件,多亏了一些NuGet软件包(即
    Microsoft.AspNet.signar
    Microsoft.AspNet.signar.Redis
    ),这非常简单,我只需要在Owin startups文件中添加一些新行;一名工人:

    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(基于链接)重新实现所有功能,我将包
    Microsoft.AspNet.signal.Redis
    替换为
    Microsoft.AspNet.signal.ServiceBus
    ,并将行
    UseRedis
    替换为:

    GlobalHost.DependencyResolver.UseServiceBus("Endpoint=sb://XXX.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXX", "TOPIC");
    
    但一旦启动客户机/服务器通信,我就会得到:

    无法成功初始化任何传输。尝试指定一个 自动初始化的传输方式不同或完全没有。“

    出了什么问题,它应该可以正常工作

    无法成功初始化任何传输。请尝试为自动初始化指定其他传输或完全不指定传输

    要解决此问题,您可以,并且可以在浏览器控制台选项卡中查看应用程序正在使用的传输

    $.connection.hub.logging = true;
    
    然后,您可以尝试在启动客户端连接时显式指定不同的传输,并测试它是否工作

    $.connection.hub.start({ transport: 'specify transport that you want' })
    
    目前,支持以下传输:

    • 网袋
    • 服务器发送
    • 事件永久帧(仅适用于Internet Explorer)
    • Ajax长轮询

    您使用的是哪个版本的Signal?版本为2.2.1是否在所有浏览器(Edge、IE、Firefox、Chrome、Safari等)中都会失败使用相同的错误消息?我知道这样问似乎很疯狂,因为唯一的更改是背板的服务总线,但我很好奇。azure订阅存在问题,似乎需要一个标准计划(因为主题是必需的)在我执行基本计划时。现在的问题是关于版本控制
    错误:您使用的客户端版本与服务器不兼容。客户端版本1.5,服务器版本未定义。
    而在客户端和服务器上,我都有版本2.2.1。我不知道为什么?我想signar.ServiceBus Package可能有问题,请不要尝试使用Microsoft ASP.NET SignalR 2.1.1,并测试其是否有效。