如何访问signalr枢纽蔚蓝webrole

如何访问signalr枢纽蔚蓝webrole

问题描述:

我有一个工作SignalR中心包含一些连续运行的方法,他们管理会话生命周期,连接会话......这些连续运行的方法是使用Timer类执行每X秒。这真的不是一个好的做法,因为线程泄漏,性能问题,锁...如何访问signalr枢纽蔚蓝webrole

一个更好的实现将有一个WebRole,所有这些“工作方法”应该在WebRole.cs文件中去,女巫做一个很多意义,因为这是天蓝色角色的目的。

现在的probleme,它无法获得使用此代码轮毂方面的工作实例:

var hubContext = GlobalHost.ConnectionManager.GetHubContext<AppHub>(); 
hubContext.Clients.All.Message("hello from webrole"); 

hubContext被实例化(所以不为空),但即便如此,仍然没有被广播到客户端。没有错误,也没有例外!

我想发生这种情况,因为WebRole.csStartup.cs在不同的线程中实例化?

我如何可以访问WebRole.cs枢纽方面?

谢谢。

+0

''我有一个可用的SignalR Hub''您在哪里托管SignalR Hub服务器?它是否在Azure Worker角色中? –

+0

@FredHan它的网络角色 – dafriskymonkey

hubContext被实例化(所以不是空),但即便如此,仍然没有任何广播给客户端。没有错误,也没有例外!

我能在我的身边重现同样的问题。广播消息从WebRole.cs客户端,你可以尝试安装Microsoft.AspNet.SignalR.Client并调用枢纽方法来发送消息给客户。下面的代码在Compute Emulator中适用于我,您可以参考它。

WebRole.cs

public class WebRole : RoleEntryPoint 
{ 
    public override bool OnStart() 
    { 
     // For information on handling configuration changes 
     // see the MSDN topic at https://go.microsoft.com/fwlink/?LinkId=166357. 

     return base.OnStart(); 
    } 

    public override void Run() 
    { 
     while (true) 
     { 
      System.Threading.Thread.Sleep(30000); 

      var hub = new Microsoft.AspNet.SignalR.Client.HubConnection("http://localhost:57276/signalr/hubs"); 

      var proxy = hub.CreateHubProxy("ChatHub"); 
      hub.Start().Wait(); 

      //invoke hub method 
      proxy.Invoke("mySend", "hello from webrole; " + DateTime.UtcNow.ToString()); 
     }   
    } 


} 

ChatHub.cs

public class ChatHub : Hub 
{ 
    public void Send(string name, string message) 
    { 
     Clients.All.addNewMessageToPage(name, message); 
    } 

    public void mySend(string message) 
    { 
     Clients.All.addNewMessageToPage("webrole", message); 
    } 
} 

测试结果

enter image description here