我有以下情况:
问题是,我该如何将Webjob的进度传达给客户?最初,我的想法是从Webjob推送消息,因此Hub可以从队列中读取它。然后,我将从集线器通知客户。但是,我找不到通信webjob和集线器的方法,我不知道当将消息推送到队列或服务总线中时如何在集线器中触发操作。也就是说,我不知道如何将集线器预订到队列中的某个消息。
有人可以帮我吗?
最佳答案
我这样做的方法是将Webjob设置为SignalR客户端,通过SignalR将消息从Webjob推送到服务器,然后将这些消息中继到SignalR Web客户端。
首先在您的webjob上安装SignalR Web客户端(程序包ID为Microsoft.AspNet.SignalR.Client)。
然后在您的Web作业中,初始化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);
}
}
关于asp.net-mvc-5 - WebJob和SignalR集线器之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407286/