我们正在将一个Web应用程序移动到Azure,并希望对我们的策略提供一些反馈。 Azure对我们来说是新的,因此我们希望确保我们走的是正确的道路。请注意,我们正在使用VS 2010。
我们当前的应用程序包含两个部分:1)用户界面的标准Web应用程序和2)在服务器上运行的Windows应用程序。 Windows应用程序每2分钟唤醒一次,在SQL表中查找任何新记录,处理它们然后休眠。 Windows应用程序还告诉我们处理的记录数,处理时间等,以便我们可以看到系统的一般健康状况。两个应用程序都读/写存储在服务器上的文件。 (是的,这应该是一个服务,但我们想要接口,以便我们可以快速查看整体运行状况。我们有一个服务,检查以确保接口正在运行,并在出现故障时重新启动它。)
将Web应用程序移植到Azure是直截了当的,我们在VS中对它进行了一些测试,没有任何问题。我们需要一些关于Windows应用程序和设置/访问文件的建议。
这是我们的策略。所有建议都表示赞赏。
1 - 为Windows应用程序创建辅助角色。 2 - 将此辅助角色设置为启动项目。 3 - 辅助角色将创建Azure云驱动器(用于文件访问)并将驱动器号传递给Web应用程序。我们将在onstart中建立连接。 4 - 确保worker角色是持久的,这样我们就不会丢失云驱动器。
另外两个问题:
1 - 看来工人角色可以拥有用户界面,但也许我们误读了某些东西。如果我们尝试将Windows应用程序添加到解决方案中,则会收到许多错误。我们还尝试创建一个辅助角色并将其设置为Windows窗体应用程序,但是立即产生了一个关于它们不是'主'方法的错误,这对我们来说是一个警告标志,我们不应该这样做。我们在这里缺少什么?
2 - 如果将辅助角色设置为启动项目,是否需要启动Web应用程序,或者在辅助角色完成其启动处理后自动启动?
答案 0 :(得分:2)
Web和Worker角色基本上是Windows Server 2008 SP2 / R2 VM,其中Web角色已配置并运行IIS。您拥有的实际webrole.cs和workerrole.cs代码只是在引导Web角色/辅助角色实例时运行的脚手架。您还有可以处理提升权限任务的启动脚本(例如修改注册表和安装软件)。
关于您的策略:您不必必须为您的Windows服务创建辅助角色,但如果您认为存在性能问题,则应该考虑它。您可以选择在Web角色中运行它 - 只需从OnStart()或Run()启动线程即可。您需要确保只运行一个调度程序。有很多关于在Windows Azure中运行调度程序的SO问题,例如this one,以及一些讨论使用quartz.net的问题,如this那样。
关于共享云驱动器:一个角色无法与另一个角色共享驱动器号。使用云驱动器,只能有一个编写器。事实上,每个角色实例都需要自己的云驱动器。在这个区域中,您可能需要考虑将blob存储用于公共文件存储。
根据您提到的没有UI的辅助角色:虽然Visual Studio无法将Web应用程序添加到辅助角色,但可以执行此操作。更重要的是:由于辅助角色只是一个Windows Server VM,因此没有什么可以阻止您运行任意数量的替代Web服务器(例如tomcat,jetty和jboss)。您只需要从启动脚本或通过启动进程从OnStart()运行它们。您还需要根据需要创建输入端点(例如,http端口80,https 443)。您可以轻松地在Web角色中运行这些服务器(并运行支持tcp,udp,http或https的任何其他类型的端口服务器)。
关于启动项目:您的云项目将是启动项目。 Web和辅助角色实例并行启动。