C# 如何在本地/本地托管Azure worker角色?

C# 如何在本地/本地托管Azure worker角色?,c#,azure,azure-worker-roles,C#,Azure,Azure Worker Roles,一些背景 我们第一次冒险进入Azure,并尝试以婴儿阶段的方式完成。目前,我们的第一个应用程序将是工人角色监控队列,以处理请求(如发送电子邮件或执行一些屏幕抓取),我们只需将内部MVC应用程序和WCF服务插入队列。我们稍后将MVC应用程序和WCF服务移动到Azure 我们的开发工作流程基本上是这样的(以一些不重要的方式进行了修改): 在本地和某些共享服务器上开发。检查源代码管理 每隔15分钟,build server构建并部署到“开发”环境(兼作CI和Cover,以防我们需要使用“开发”环境而不

一些背景

我们第一次冒险进入Azure,并尝试以婴儿阶段的方式完成。目前,我们的第一个应用程序将是工人角色监控队列,以处理请求(如发送电子邮件或执行一些屏幕抓取),我们只需将内部MVC应用程序和WCF服务插入队列。我们稍后将MVC应用程序和WCF服务移动到Azure

我们的开发工作流程基本上是这样的(以一些不重要的方式进行了修改):

  • 在本地和某些共享服务器上开发。检查源代码管理
  • 每隔15分钟,build server构建并部署到“开发”环境(兼作CI和Cover,以防我们需要使用“开发”环境而不是本地环境)
  • 技术测试人员手动触发构建服务器,将最后一个成功的“Dev”构建部署到测试环境(或者,先前部署的测试构建,包括/不包括数据库)
  • 技术测试人员和业务测试人员手动触发构建服务器,将最后一个成功的“测试”构建(或者,先前部署的测试构建,包括/不包括数据库)部署到QA环境中
  • 在某个时刻,我们合并QA批准部署的变更集
  • 稍后,我们的生产构建服务器将此版本部署到登台,然后再部署到我们的生产环境(我们在并行/独立环境中托管它N次)
  • 正如您所知,我们有许多内部托管的应用程序版本,供内部支持人员在投入生产之前使用。我希望这些产品对Azure的依赖程度相当低。我不需要完全依赖服务器,所以我们将继续使用Azure队列和其他一些机制,因为它们很容易继续使用,但我们不希望我们的构建服务器必须为这些环境中的每一个部署到Azure(或者支付所有托管费用)

    那么,我们如何才能合理地在本地托管我们的工作者角色,从而实际测试部署到Azure的代码呢?

    建议的一个选项是,我们将worker角色创建为包装器/外观,并在类库中完成所有实际工作,这是我们的计划。然而,允许我们“托管”它的后续步骤是创建第二个包装器/外观应用程序,该应用程序执行与工作者角色相同的工作,我们可以将其作为计划任务或windows服务器运行。归根结底,我不喜欢这个选项,因为整个项目在进入阶段之前是不会被测试的

    我们可以创建第二个包装器/外观应用程序,而不是调用它实际引用的类库,并调用worker角色中的
    Run()
    函数,这样做类似吗?

    您认为这会对您有所帮助吗?这些是真正的Azure提供程序和仿真器之间的连接

    为你的工人角色设置一个门面似乎是合理的。并使用适配器来适应任何可能的云(或其他托管)技术?只是想提出一些想法。我以前确实使用过这种方法,但这是一个“个人”项目

    用于配置您的角色等。
    像这样配置Azure模拟器。

    老实说,facade方法是最好的选择

    当部署最终依赖于支持基础架构时,在部署到相同或类似的基础架构之前,完全测试是非常困难的。Azure Worker角色肯定就是这样

    通过将应用程序的功能方面与基础架构接触点分离,您可以花费精力确保代码按其应有的方式运行,证明外观按其应有的方式运行,然后对最终的组合进行信心测试

    除非您的测试环境与您的生产环境完全相同,否则总会有一些折衷的因素

    这就是Azure临时部署的用途;切换到生产之前的最后一级信心测试

    您可以创建一个额外的小型部署,纯粹是为了以后的测试阶段。您为部署角色的时间付费,因此,如果在测试完成后删除部署,您可以将成本降至最低


    最后,facade模式是一个例子,可测试性设计。考虑您的代码,以最大限度地提高部署前可测试的数量,并将后期测试的风险降至最低。

    这听起来像VS2010在本地调试Azure应用程序时使用的方法。这是不是我可以用一种非常有限的“服务器”方式设置的东西(同样,主要是为非开发人员托管应用程序,以便他们可以测试它)?如果Azure emulator对我有用的话,我需要像TeamCity或CruiseControl这样的东西(最终是nant/powershell/you's name it scripts)来部署到Azure emulator。我希望我能理解你:你一定可以通过脚本部署它们,并让QAs在这些机器上进行测试。您可以使用power shell进行远程Azure VM访问。你不需要VS2010来部署或其他什么。如果你的意思是我可以使用脚本来部署到模拟器,那么是的,你明白我的意思。如果你现在谈论的是Azure本身,那不是我的问题。再次强调,这里的高层目标是能够“托管Azure”用于测试目的。这似乎正是我所需要的!谢谢!!:-)不管我实际上是如何主持这个前提下,我已经做了你说的大部分。我的工作者角色程序集基本上包含两行代码:
    var foo=new Bar();foo.ProcessContinuously(关于此环境的一些信息)