asp.net-mvc-5 – WebJob和SignalR Hub之间的通信

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-5 – WebJob和SignalR Hub之间的通信前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下情况:

>我有一个天蓝色的webjob(用于发送邮件),我需要在我的Web应用程序中检查webjob的进度.
>我正在使用SignalR与我的服务器上的客户端进行通信.
>当我想发送电子邮件时,我在队列中按下一条消息,然后天蓝色的webjob就完成了他的工作.

问题是,我如何将webjob的进度传达给客户?最初我的想法是从webjob推送消息,因此Hub可以从队列中读取它.然后,我会通过集线器通知客户.但是,我无法找到传达webjob和集线器的方法,当消息被推入队列或服务总线时,我不知道如何在集线器中触发操作.也就是说,我不知道如何将集线器订阅到队列的某个消息.

有人可以帮我吗?

解决方法

我这样做的方法是将webjob设置为SignalR客户端,通过SignalR将消息从webjob推送到服务器,然后将这些消息中继到SignalR Web客户端.

首先在webjob上安装SignalR Web客户端(nuget包ID为Microsoft.AspNet.SignalR.Client).

然后在您的webjob中,初始化您的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相关文章