簡體   English   中英

如何訪問Azure Webrole中的Signalr Hub

[英]how to access signalr hub in azure webrole

我有一個工作正常的SignalR集線器,其中包含一些連續運行的方法,它們正在管理會話生命周期,連接會話...這些連續運行的方法使用Timer類每隔X秒執行一次。 由於線程泄漏,性能問題,鎖,這實際上不是一個好習慣。

更好的實現方法是擁有一個WebRole,所有這些“工人方法”都應放在WebRole.cs文件中,巫婆很有道理,因為這是天藍色角色的真正目的。

現在的問題是,使用以下代碼無法獲取中心上下文的工作實例:

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

hubContext被實例化(因此不能為null),但是即使如此,仍然沒有任何內容廣播到客戶端。 沒有錯誤也沒有例外!

我猜這是因為WebRole.csStartup.cs是在不同的線程中實例化的?

如何在WebRole.cs訪問中心上下文?

謝謝。

hubContext被實例化(因此不能為null),但是即使如此,仍然沒有任何內容廣播到客戶端。 沒有錯誤也沒有例外!

我可以在自己的身邊重現同樣的問題。 要從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);
    }
}

測試結果

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM