1

我们正在将一个 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 - 确保工作者角色是持久的,这样我们就不会丢失云驱动器。

另外两个问题:

1 - 工人角色似乎可以有一个用户界面,但也许我们误读了一些东西。如果我们尝试将 Windows 应用程序添加到解决方案中,我们会收到许多错误。我们还尝试创建一个工作角色并将其设置为 Windows 窗体应用程序,但这立即产生了一个错误,即它们不是“主要”方法,这是对我们的警告标志,我们不应该这样做。我们在这里缺少什么?

2 - 如果工作角色被设置为启动项目,它是否需要启动网络应用程序,或者工作角色完成启动处理后是否会自动启动?

4

1 回答 1

2

Web 和 Worker 角色基本上是 Windows Server 2008 SP2 / R2 VM,其中 Web 角色配置并运行了 IIS。您拥有的实际 webrole.cs 和 workerrole.cs 代码只是在启动 Web 角色/工作者角色实例时运行的脚手架。您还拥有可以处理提升权限任务(例如修改注册表和安装软件)的启动脚本。

关于您的策略:您不必您的 Windows 服务创建辅助角色,但如果您认为存在性能问题,您应该考虑它。您可以选择在您的网络角色中运行它 - 只需从您的 OnStart() 或 Run() 启动线程。您需要确保只有一个调度程序正在运行。有许多关于在 Windows Azure 中运行调度程序的 SO 问题,例如这个,还有一些讨论了quartz.net 的使用,就像这个一样。

关于共享的云驱动器:一个角色不能与另一个角色共享驱动器号。而使用云驱动器,只能有一个作家。事实上,每个角色实例都需要自己的云驱动器。这是您可能需要考虑将 Blob 存储用于公共文件存储的领域。

根据您提到的没有 UI 的辅助角色:虽然 Visual Studio 不利于将 Web 应用程序添加到辅助角色,但您可以这样做。更重要的是:由于工作角色只是一个 Windows Server VM,因此没有什么可以阻止您运行任意数量的替代 Web 服务器(例如 tomcat、jetty 和 jboss)。您只需要从启动脚本或通过启动进程从 OnStart() 运行这些。您还需要根据需要创建输入端点(例如 http 端口 80、https 443)。您可以轻松地以 Web 角色运行这些服务器(并运行支持 tcp、udp、http 或 https 的任何其他类型的端口服务器)。

关于启动项目:您的云项目将是启动项目。Web 和辅助角色实例并行启动。

于 2012-07-20T12:29:12.080 回答