Asp.net-Mvc-5
WebJob 和 SignalR Hub 之間的通信
我有以下情況:
- 我有一個 azure webjob(用於發送郵件),我需要在我的 web 應用程序中檢查 webjob 的進度。
- 我正在使用 SignalR 從我的伺服器與客戶端進行通信。
- 當我想發送電子郵件時,我會在隊列中推送一條消息,然後 azure webjob 會完成他的工作。
問題是,如何將 webjob 的進度傳達給客戶端?最初我的想法是從 webjob 推送消息,以便 Hub 可以從隊列中讀取它。然後,我會從中心通知客戶。但是,我無法找到一種方法來通信 webjob 和集線器,當消息被推送到隊列或服務匯流排中時,我不知道如何在集線器中觸發操作。也就是說,我不知道如何訂閱集線器到隊列的某個消息。
有人可以幫我嗎?
我所做的方法是將 webjob 設置為 SignalR 客戶端,通過 SignalR 從 webjob 將消息推送到伺服器,然後將這些消息中繼到 SignalR web 客戶端。
首先在您的網路作業上安裝 SignalR Web 客戶端(nuget 包 ID 為 Microsoft.AspNet.SignalR.Client)。
然後在您的網路作業中,初始化您的 SignalR 連接集線器並向伺服器發送消息,例如:
public class Functions { HubConnection _hub = new HubConnection("http://your.signalr.server"); var _proxy = hub.CreateHubProxy("EmailHub"); public async Task ProcessQueueMessageAsync([QueueTrigger("queue")] EmailDto message) { if (_hub.State == ConnectionState.Disconnected) { await _hub.Start(); } ... await _proxy.Invoke("SendEmailProgress", message.Id, "complete"); } }您的 SignalR 伺服器將接收這些消息,然後可以將它們中繼到其他 SignalR 客戶端,例如:
public class EmailHub : Hub { public void SendEmailProgress(int messageId, string status) { Clients.All.broadcastEmailStatus(messageId, status); } }