C# ASP.NET MVC5 + 工作者角色(无 Azure)

C# ASP.NET MVC5 + Worker Role (no Azure)

我一直在寻找这个问题的起点,我已经用尽了所有的搜索努力。

我(认为我)想在我的新 MVC5 项目中包含一个工作者角色。这将托管在我公司 int运行et 内的 Windows Server 2012 和 IIS 8 上(这意味着我无法使用 Azure Web 服务)。这个附加软件的目的是解析用户提供的 XML 文件,然后创建对象将数据保存到后端数据库(以工作者角色),稍后由控制器检索和显示在视图中。

我对工作者角色的概念并不陌生,我写过一个网络爬虫,虽然这是很久以前的事了,而且没有将 MVC5 网络角色作为附加组件。所以我知道一个工人角色由 while(true) 和一个等待组件组成。所以我想我对这里社区的问题有两个方面:

  1. 我假设的解是否正确?工作者角色 运行 在本地的同一个 IIS 实例中我想如何处理我的 MVC5 应用程序的大文本处理?如果没有,我的其他选择是什么?

  2. 您是否有 link、指南、示例,可以帮助我开始如何 link 这两个?我知道他们需要通过队列进行通信,但我不知道在同一个解决方案中在哪里创建工作者角色?在我的 MVC5 项目的解决方案旁边?等等

感谢您的帮助。

要实现您的目标,您需要将工作者角色编写为传统的 c# 控制台应用程序。您不能在 MVC 项目中 运行 辅助角色或控制台应用程序。它们可以 运行 在同一台机器本地(本地或 VM 中)但它们不是由同一进程托管的。相反,您将 运行 两个项目分开并使用一些通信机制,如队列服务、数据库 table、总线服务。提示:在azure上,web角色和worker角色实际上是一个虚拟机运行ning一个宿主进程,在worker角色上这个进程叫做WaWorkerHost,在web角色上叫做WaIISHost。 More info here

1) 在您的 MVC 项目中,您收到了用户输入并将其保存以供稍后处理。之后,您将消息发送到目标队列或总线(如果您使用的是 sql table,则在 table 上放置一个新寄存器)。

2) 在你的工作项目中。您有一个无限循环等待队列或总线中的新消息(或 sql table 中的新记录)。当包含有关用户输入的信息的新消息到达时,您将完成工作,然后您会睡 X 毫秒。醒来并尝试阅读另一条消息。

我使用 Microsoft Azure Webjobs (Workers) + Azure queues (Communication channel) + Azure Websites (MVC project) 成功应用了这种方法。

DotNetMQ a simple and open source queue library for interprocess communication

Azure Queues. A cloud-based queue system

Web Role + Worker Role communication using Azure service bus