asp.net-mvc-5 - WebJob和SignalR集线器之间的通信

标签 asp.net-mvc-5 signalr azure-webjobs azure-servicebus-queues azure-webjobssdk

我有以下情况:

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

  • 问题是,我该如何将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/

    相关文章:

    jquery - 如何在 ASP.Net MVC 5 中调用同一项目但不同文件夹中的 jQuery 函数?

    javascript - MVC5 Ajax.ActionLink 加载新页面而不是替换

    c# - 使用 List<int> 中的 ID 在 linq 中过滤

    c# - SignalR:生成的代理与动态创建的集线器文件

    Azure Web作业 : monitor all containers in account

    typescript - 使用 Visual Studio 2019 和 Webpack 在 TypeScript 文件中未命中断点

    asp.net - 使用 Signalr 拥有一个类似 facebook 的通知系统

    c# - OWIN 停止服务器\服务?

    azure - 如何阻止 Azure WebJobs 队列消息从 Azure 队列中删除?

    c# - 使用 .NET Core 的 Azure 队列存储 WebJob