![](/img/trans.png)
[英]How can I access a file that's part of the deployment in an Azure Webrole
[英]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.cs
和Startup.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.