我一直在寻找这个问题的起点,我已经用尽了搜索工作。
我(我想)我希望在我的新MVC5项目中包含一个辅助角色。这将托管在我公司Intranet内的Windows Server 2012和IIS 8上(意味着我无法使用Azure Web服务)。这个附加软件的目的是解析用户提供的XML文件,然后创建将数据保存到后端数据库(在worker角色中)的对象,稍后由控制器检索并显示在视图中。
我对工作角色的概念并不陌生,我已经编写了一个Web爬虫,虽然这是很久以前的事了,并没有将MVC5 Web角色作为附加组件。所以我理解一个worker-role由while(true)和一个等待组件组成。所以我想我在这里向社区提出的问题有两个方面:
我在假设的解决方案中是否正确?是否在IIS的同一个实例中本地运行了一个辅助角色,我想如何为我的MVC5应用程序处理大文本处理?如果没有,我的其他选择是什么?
你有一个链接,一个指南,一个例子,有什么东西让我开始如何将这两者联系起来?我知道他们需要通过队列进行通信,但我没有最简单的想法在同一个解决方案中创建工作者角色?在我的MVC5项目的解决方案旁边?等
感谢您的帮助。
答案 0 :(得分:0)
要实现您的目标,您需要将辅助角色编写为传统的c#控制台应用程序。您无法在MVC项目中运行辅助角色或控制台应用程序。它们可以在同一台机器(本地或VM)中本地运行,但它们不是由同一进程托管的。相反,您将分别运行两个项目并使用一些通信机制,如队列服务,数据库表,总线服务。提示:在azure上,Web角色和辅助角色实际上是运行主机进程的VM,对于辅助角色,此进程称为WaWorkerHost,Web角色称为WaIISHost。 More info here
1)在MVC项目中,您收到了用户输入并保存以供日后处理。之后,您将消息发送到队列或总线(如果您使用的是sql表,则在该表上放置一个新的寄存器)。
2)在你的工人项目中。你有一个无限循环等待队列或总线中的新消息(或sql表中的新记录)。当一条新消息带有关于用户输入的信息到达时,你就完成了工作,然后你睡了X毫秒。醒来并尝试阅读另一条消息。
我使用Microsoft Azure Webjobs(Workers)+ Azure队列(通信渠道)+ Azure网站(MVC项目)成功应用此方法。
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