我有一个Azure ServiceBus消息队列,它正在从一个成熟的Windows应用程序接收消息 . 这部分很好用(每分钟几十条消息) . 我知道消息在那里 . ServiceBus命名空间类似于dtx-ns,队列名称类似于dtxrm001 .
我还有一个完全开发的MVC 5 Azure Web App . 我想连接一个新的View页面,该页面使用SignalR从Azure Service Bus Message Queue接收消息 .
我想要做的就是通过访问网页来查看ServiceBus Queue消息(来自运行完整Windows应用程序的任何人) .
这基本上就是传感器数据,比如来自传感器的温度 .
在购买了5本SignalR书籍并花了3个星期后,我想我需要一些方向 . 我是否将Azure角色添加到Azure MVC应用程序中?我是否添加了工作者角色?我是否使用依赖注入和SignalRBackplaneMessageBus?
看起来像一个简单的任务,但是现在,我现在不知道这个方法是什么?当你真正进入一个样本然后尝试连接来自ServiceBus Message Queue的消息的实际广播时,似乎没有任何意义 .
以下是我尝试过的MVC Web应用启动的一些代码:
Dim cn1 As String = "Endpoint=sb://dtx-ns.servicebus.windows.net/;SharedAccessKeyName=myname;SharedAccessKey=mykey"
Dim config As New ServiceBusScaleoutConfiguration(cn1, "dtx1")
config.TopicCount = 3
config.BackoffTime = New TimeSpan(1, 0, 1)
config.IdleSubscriptionTimeout = New TimeSpan(1, 0, 0)
config.MaximumMessageSize = 20000
config.MaxQueueLength = 50
GlobalHost.DependencyResolver.UseServiceBus(config)
GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromSeconds(10)
app.UseCors(CorsOptions.AllowAll)
app.MapSignalR()
上面显示的 endpoints 是Service Bus Message Queue的连接字符串的一部分 . 如果上面看起来是正确的,那么我该如何设置Hub以从此连接发送消息?
我需要Web角色吗?我是否需要以某种方式在我添加到当前MVC应用程序的项目中实现“Backplane Hub”?我很难过 .
2 回答
我需要从Azure Service Bus Message Queue读取Azure MVC-5 Web App,然后通过SignalR将数据发送到所有客户端网页,这已得到解决 .
代码方面,它非常简单和优雅 . 这是我的解决方案:
首先,我的Visual Studio解决方案只有一个项目 - 主要的Web应用程序项目 . 在项目的根目录中,我有一个名为djwHub的SignalR集线器类;
现在,我的MVC-5 Web应用程序在根目录中没有Startup类 . 相反,我的启动发生在位于App_Start文件夹中的IdentityConfig.vb类中 . 所以这就是我把app.MapSignalR()放在这里所示的地方;
剩下的唯一部分是Web View页面 . 请注意,我现在在网页上有6个FusionChart仪表 . 但是你应该能够选择与djwHub对话的SignalR函数调用;
特别感谢astaykov&Ashley Medway和微软,让所有这一切成为可能!
您正在使用代码scale out SignalR via ServiceBus(所谓的ServiceBus背板 - 示例中令人困惑的Web角色实际上是您的MVC应用程序,它可以在App Service中运行或作为WebRole运行 . 您的
SignalR Hub
与您的Web应用程序一起生活在一般情况) . 在Azure Web Apps上运行时,为了扩展SignalR本身,这是正确的 . 但这不是你要求的 .您要求的是从ServiceBus读取消息并将其广播到SignalR连接的客户端 . 这是完全不同的用例 . 您可以使用几个选项来实现目标:
写一个Azure WebJob using the WebJobSDK and the ServiceBus Trigger.然后当你收到消息时,只需将它发送到SignalR集线器 .
写和Azure Function to achieve basically the same as above .
在这两种情况下,SignalR具有"native" .NET client的最不为人知的事实将帮助您(您可以从任何.NET应用程序连接到SignalR,包括在Windows Phone或桌面上运行的一个) .
我这里没有提供任何代码示例,但我想我会对您的疑虑给予批准 .