以 WIN 形式使用 Azure 辅助角色后台服务

本文关键字:角色 后台 服务 Azure WIN | 更新日期: 2023-09-27 18:34:28

>我创建了一个新的winforms应用程序。我正在尝试创建一个侦听消息存储队列的类。

 using System;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Queue;
using System.Threading;
using Microsoft.WindowsAzure.ServiceRuntime;
using System.Configuration;
namespace PMonitor
{
         public class QueueWorker : RoleEntryPoint
    {
        public override void Run()
        {
               CloudQueue queue = clnt.GetQueueReference("stuff");
        while (true)
        {
            CloudQueueMessage qMessage = null;
            do
            {
                qMessage = queue.GetMessage(TimeSpan.FromSeconds(10));
                if (qMessage != null)
                {
                   //handle message
                }
            }
            while (qMessage != null);

            Thread.Sleep(10000);     
            }
        }
        public override bool OnStart()
        {
            return base.OnStart();
        }
    }
}

如何让工作人员开始在表单中运行,并在队列中找到消息时告诉我?

当前实例化此类并在窗体加载中调用 Run(( 会锁定窗体。

这样做的模式是什么?

以 WIN 形式使用 Azure 辅助角色后台服务

我怀疑对工人角色有一个基本的误解。这些不是像类一样实例化的服务。相反,这些是在 Azure 中运行的无状态虚拟机的定义。发布的代码片段是在辅助角色实例(VM(启动后运行的框架代码,代码(例如队列消耗,在你的例子中(在 Run() 方法中运行。

WinForms 应用程序不需要RoleEntryPoint类,因为它们专门用于在 Azure 中运行的无状态 VM。

队列处理(或可能需要运行的任何其他任务(与辅助角色无关;应用只需使用存储 SDK(或直接调用 REST API(即可使用队列消息。如何/在哪里设置队列处理逻辑完全取决于您。

注意:您当然可以从 WinForms 应用程序调用在辅助角色实例中运行的服务,但我认为这不是您要问的。

StackOverflow上有几个答案,其中详细介绍了工人角色,例如这个。