我这样做的方法是将 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);
}
}