Azure 在Web角色中使用Webjobs SDK

Azure 在Web角色中使用Webjobs SDK,azure,azure-web-roles,azureservicebus,azure-webjobssdk,Azure,Azure Web Roles,Azureservicebus,Azure Webjobssdk,我们有一个Azure Web角色,它需要监控服务总线队列,以获取对早期请求的响应(然后将通过信号器传输到客户端) 首先,我们希望在WebRole.OnStart()中使用消息泵(QueueClient.OnMessage)。然而,我们已经变得非常喜欢WebJobs SDK,特别是它如何让程序员可以自由地使用一些较低级别的实现和仪表板 出于各种原因,我们希望保留Web角色,而不是切换到网站。因此出现了一个问题:如何在Azure Web角色中使用WebJobs SDK?在一个小实验中,我们在WebR

我们有一个Azure Web角色,它需要监控服务总线队列,以获取对早期请求的响应(然后将通过信号器传输到客户端)

首先,我们希望在WebRole.OnStart()中使用消息泵(QueueClient.OnMessage)。然而,我们已经变得非常喜欢WebJobs SDK,特别是它如何让程序员可以自由地使用一些较低级别的实现和仪表板

出于各种原因,我们希望保留Web角色,而不是切换到网站。因此出现了一个问题:如何在Azure Web角色中使用WebJobs SDK?在一个小实验中,我们在WebRole.cs中修改了Web角色的OnStart(),如下所示:

公共类WebRole:RoleEntryPoint
{
公共覆盖bool OnStart()
{
JobHostConfiguration配置=新的JobHostConfiguration()
{
ServiceBusConnectionString=“…”,
StorageConnectionString=“…”,
仪表板连接字符串=“…”
};
JobHost主机=新的JobHost(配置);
host.RunAndBlock();
返回base.OnStart();
}
公共静态void ProcessQueueMessage([ServiceBusTrigger(“MyQueue”)]字符串inputText)
{
Trace.WriteLine(输入文本);
}
}
这似乎很好,但我们很难评估它对Web角色的影响。会有后果吗?也许是在扩展Web角色方面


谢谢

WebJobs SDK在WebRole中应该可以正常工作

我对您的实现有一个建议:不要阻止
OnStart
方法。不要调用
RunAndBlock
,而是使用
Start
/
StartAsync
。这将不会阻止该方法,并将为作业主机创建单独的线程

可能看起来像(不确定是否编译):

公共类WebRole:RoleEntryPoint
{
私有作业主机;
公共覆盖bool OnStart()
{
JobHostConfiguration配置=新的JobHostConfiguration()
{
ServiceBusConnectionString=“…”,
StorageConnectionString=“…”,
仪表板连接字符串=“…”
};
主机=新作业主机(配置);
host.Start();
返回base.OnStart();
}
//不确定这是否是OnStop的签名
//或者即使这个方法是这样调用的
公共覆盖bool OnStop()
{
host.Stop();
返回base.OnStop();
}
公共静态void ProcessQueueMessage([ServiceBusTrigger(“MyQueue”)]字符串inputText)
{
Trace.WriteLine(输入文本);
}

}

谢谢,这可以很好地监视队列。但是,由于我们修改了WebRole.cs,队列消息现在是在与web应用程序不同的过程中接收的(信号器可以从该过程通知客户端)。我们应该让第一个流程通知第二个流程吗?怎么用?或者只是将web作业移动到Global.asax或OWIN的Startup.cs?您可以在web应用程序中移动web作业。这不应该是个问题。唯一担心的是,默认情况下,如果没有请求,IIS将停止网站(和webjob)。您需要某种类型的“始终打开”模式来保持webjob的有效性您还可以在worker角色中自宿主信号器,并从WebRole调用它