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

Engage Azure Worker Role Background Service In Win Form

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

 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();
        }

    }

}

如何让工作人员在表单中启动 运行ning 到 运行 并在它在队列中找到消息时告诉我?

当前正在实例化此 class 并在表单加载中调用 运行() 会锁定表单。

这样做的模式是什么?

我怀疑对工作者角色存在基本的误解。这些不是您像 class 那样实例化的服务。相反,这些是 Azure 中 运行 无状态虚拟机的定义。您发布的代码片段是在启动辅助角色实例(虚拟机)后获得 运行 的框架代码,代码(例如队列消耗,在您的情况下)运行ning 在 Run()方法。

WinForms 应用程序对 RoleEntryPoint classes 的需求为零,因为它们专门用于 Azure 中的无状态 VM 运行ning。

队列处理(或您可能需要 运行 的任何其他任务)与工作者角色无关;您的应用只需使用存储 SDK(或直接调用 REST API)即可使用队列消息。 How/where您设置队列处理逻辑完全由您决定。

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

Whosebug 上有几个答案更详细地介绍了工作者角色,例如 this one