以 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(( 会锁定窗体。
这样做的模式是什么?
我怀疑对工人角色有一个基本的误解。这些不是像类一样实例化的服务。相反,这些是在 Azure 中运行的无状态虚拟机的定义。发布的代码片段是在辅助角色实例(VM(启动后运行的框架代码,代码(例如队列消耗,在你的例子中(在 Run()
方法中运行。
WinForms 应用程序不需要RoleEntryPoint
类,因为它们专门用于在 Azure 中运行的无状态 VM。
队列处理(或可能需要运行的任何其他任务(与辅助角色无关;应用只需使用存储 SDK(或直接调用 REST API(即可使用队列消息。如何/在哪里设置队列处理逻辑完全取决于您。
注意:您当然可以从 WinForms 应用程序调用在辅助角色实例中运行的服务,但我认为这不是您要问的。
StackOverflow上有几个答案,其中详细介绍了工人角色,例如这个。