Signalr 带Azure服务总线的信号器背板
我需要实现一个简单的工作集群,创建包含大量pdf的文件zip文件。目前的体系结构如下所示:Signalr 带Azure服务总线的信号器背板,signalr,azureservicebus,signalr-backplane,Signalr,Azureservicebus,Signalr Backplane,我需要实现一个简单的工作集群,创建包含大量pdf的文件zip文件。目前的体系结构如下所示: 单个客户端(WebAPI+AngularJS) 执行此工作的Hangfire服务器集群 一旦客户端请求一个新的zip文件,该请求就会进入Hangfire队列。当集群中的一个节点空闲时,作业将启动。在作业执行期间,将通知客户进度。由于集群,需要另一个组件: 一种所谓的,信号机背板,用于处理工人和客户之间的通信 我使用Redis来实现这个组件,多亏了一些NuGet软件包(即Microsoft.AspNet.s
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长轮询
错误:您使用的客户端版本与服务器不兼容。客户端版本1.5,服务器版本未定义。
而在客户端和服务器上,我都有版本2.2.1。我不知道为什么?我想signar.ServiceBus Package可能有问题,请不要尝试使用Microsoft ASP.NET SignalR 2.1.1,并测试其是否有效。