Azure 云服务(经典)定义 WorkerRole 架构

重要

从 2024 年 9 月 1 日开始,云服务(经典版)对所有客户已停止支持。 从 2024 年 10 月开始,Microsoft 将停止并关闭任何正在运行的现有部署,数据将永久性丢失。 新部署应使用基于 Azure 资源管理器的新型部署模型 Azure 云服务(外延支持)

Azure 辅助角色对普通开发非常有用,可为 web 角色执行后台处理。

服务定义文件的默认扩展名为 .csdef。

工作角色的基本服务定义架构。

对于包含工作角色的服务定义文件,其基本格式如下所示。

<ServiceDefinition …>
  <WorkerRole name="<worker-role-name>" vmsize="<worker-role-size>" enableNativeCodeExecution="[true|false]">
    <Certificates>
      <Certificate name="<certificate-name>" storeLocation="[CurrentUser|LocalMachine]" storeName="[My|Root|CA|Trust|Disallow|TrustedPeople|TrustedPublisher|AuthRoot|AddressBook|<custom-store>" />
    </Certificates>
    <ConfigurationSettings>
      <Setting name="<setting-name>" />
    </ConfigurationSettings>
    <Endpoints>
      <InputEndpoint name="<input-endpoint-name>" protocol="[http|https|tcp|udp]" localPort="<local-port-number>" port="<port-number>" certificate="<certificate-name>" loadBalancerProbe="<load-balancer-probe-name>" />
      <InternalEndpoint name="<internal-endpoint-name" protocol="[http|tcp|udp|any]" port="<port-number>">
         <FixedPort port="<port-number>"/>
         <FixedPortRange min="<minimum-port-number>" max="<maximum-port-number>"/>
      </InternalEndpoint>
     <InstanceInputEndpoint name="<instance-input-endpoint-name>" localPort="<port-number>" protocol="[udp|tcp]">
         <AllocatePublicPortFrom>
            <FixedPortRange min="<minimum-port-number>" max="<maximum-port-number>"/>
         </AllocatePublicPortFrom>
      </InstanceInputEndpoint>
    </Endpoints>
    <Imports>
      <Import moduleName="[RemoteAccess|RemoteForwarder|Diagnostics]"/>
    </Imports>
    <LocalResources>
      <LocalStorage name="<local-store-name>" cleanOnRoleRecycle="[true|false]" sizeInMB="<size-in-megabytes>" />
    </LocalResources>
    <LocalStorage name="<local-store-name>" cleanOnRoleRecycle="[true|false]" sizeInMB="<size-in-megabytes>" />
    <Runtime executionContext="[limited|elevated]">
      <Environment>
         <Variable name="<variable-name>" value="<variable-value>">
            <RoleInstanceValue xpath="<xpath-to-role-environment-settings>"/>
          </Variable>
      </Environment>
      <EntryPoint>
         <NetFxEntryPoint assemblyName="<name-of-assembly-containing-entrypoint>" targetFrameworkVersion="<.net-framework-version>"/>
         <ProgramEntryPoint commandLine="<application>" setReadyOnProcessStart="[true|false]"/>
      </EntryPoint>
    </Runtime>
    <Startup priority="<for-internal-use-only>">
      <Task commandLine="" executionContext="[limited|elevated]" taskType="[simple|foreground|background]">
        <Environment>
         <Variable name="<variable-name>" value="<variable-value>">
            <RoleInstanceValue xpath="<xpath-to-role-environment-settings>"/>
          </Variable>
        </Environment>
      </Task>
    </Startup>
    <Contents>
      <Content destination="<destination-folder-name>" >
        <SourceDirectory path="<local-source-directory>" />
      </Content>
    </Contents>
  </WorkerRole>
</ServiceDefinition>

架构元素

服务定义文件包括以下元素,本文中的后续部分将对其进行详细说明:

WorkerRole

ConfigurationSettings

设置

LocalResources

LocalStorage

终结点

输入端点

内部端点

InstanceInputEndpoint

AllocatePublicPortFrom

FixedPort

FixedPortRange

证书

证书

进口

导入

运行时

环境

EntryPoint

NetFxEntryPoint

ProgramEntryPoint

变量

RoleInstanceValue

初创公司

任务

内容

内容

SourceDirectory

工作角色

WorkerRole 元素描述一个对普通开发非常有用并且可为 web 角色执行后台处理的角色。 一个服务可能包含零个或多个工作角色。

下表介绍了 WorkerRole 元素的属性。

特征 类型 说明
姓名 字符串 必填。 工作者角色的名称。 该角色的名称必须唯一。
启用本机代码执行 布尔型 可选。 默认值是 true,默认情况下本机代码执行和完全信任已启用。 将此属性设置为 false,可禁用工作角色的本地代码执行,并改为使用 Azure 部分信任的环境。
vmsize 字符串 可选。 设置此值可更改分配给此角色的虚拟机的大小。 默认值是 Small。 有关可能的虚拟机大小及其属性的列表,请参阅云服务的虚拟机大小

配置设置

ConfigurationSettings 元素描述工作角色的配置设置的集合。 此元素是 Setting 元素的父级。

设置

Setting 元素描述用于为角色实例指定配置设置的名称和值对。

下表介绍了 Setting 元素的属性。

特征 类型 说明
姓名 字符串 必填。 配置项的唯一名称。

角色的配置设置是在服务定义文件中声明并在服务配置文件中设置的名称-值对。

本地资源

LocalResources 元素描述工作角色的本地存储资源集。 此元素是 LocalStorage 元素的父级。

本地存储

LocalStorage 元素标识用于在运行时为服务提供文件系统空间的本地存储资源。 一个角色可以定义零个或多个本地存储资源。

注释

LocalStorage 元素可显示为 WorkerRole 元素的子级,提供与早期版本的 Azure SDK 的兼容性。

下表介绍了 LocalStorage 元素的属性。

特征 类型 说明
姓名 字符串 必填。 当地商店的独特名称。
cleanOnRoleRecycle 布尔型 可选。 指示重启角色时是否应清理本地存储。 默认值为 true
大小以MB为单位 整数 (int) 可选。 需要为本地存储分配的存储空间量,以 MB 为单位。 如果未指定,则分配的默认存储空间为 100 MB。 可分配的最小存储空间量为 1 MB。

最大的本地资源大小取决于虚拟机大小。 有关详细信息,请参阅云服务的虚拟机大小

分配给本地存储资源的目录的名称对应于为名称属性提供的值。

端点

Endpoints 元素描述角色的输入(外部)、内部和实例输入终结点的集合。 此元素是 InputEndpointInternalEndpointInstanceInputEndpoint 元素的父级。

输入终结点和内部终结点是分别分配的。 一个服务总共可以有 25 个输入终结点、内部终结点和实例输入终结点,这些终结点可在一个服务中允许存在的 25 个角色间分配。 例如,如果你有 5 个角色,则可以为每个角色分配 5 个输入终结点,或者可以将 25 个输入终结点分配给单个角色,或者可以为 25 个角色每个都分配 1 个输入终结点。

注释

部署的每个角色需要一个实例。 订阅的默认预配限制为 20 个内核,因此最多可有 20 个角色实例。 如果应用程序需要的实例数比默认预配提供的数目更多,请参阅计费、订阅管理和配额支持,了解有关提高配额的详细信息。

输入端点

InputEndpoint 元素描述工作角色的外部终结点。

可以定义由 HTTP、HTTPS、UDP 和 TCP 终结点组成的多个终结点。 可以指定为输入终结点选择的任意端口号,但为服务中每个角色指定的端口号必须唯一。 例如,如果指定一个角色将端口 80 用于 HTTP,将端口 443 用于 HTTPS,则之后可能会指定第二个角色将端口 8080 用于 HTTP,将端口 8043 用于 HTTPS。

下表介绍了 InputEndpoint 元素的属性。

特征 类型 说明
姓名 字符串 必填。 外部终结点的唯一名称。
协议 字符串 必填。 外部终结点的传输协议。 对于工作角色,可能的值为 HTTPHTTPSUDPTCP
港口 整数 (int) 必填。 外部终结点的端口。 可以指定所选的任何端口号,但为服务中的每个角色指定的端口号必须是唯一的。

可能的值介于 1 和 65535(包含在内)之间(Azure SDK 1.7 或更高版本)。
证书 字符串 需要 HTTPS 终结点。 由 Certificate 元素定义的证书的名称。
本地端口 整数 (int) 可选。 指定用于终结点上内部连接的端口。 localPort 属性将终结点的外部端口映射到角色的内部端口。 该属性在以下情况下非常有用:角色必须与端口上的内部组件通信,该内部组件不同于外部公开的组件。

如果未指定,则 localPort 的值与 port 属性相同。 将 localPort 的值设置为“*”会自动分配可使用运行时 API 发现的未分配端口。

可能的值介于 1 和 65535(包含在内)之间(Azure SDK 1.7 或更高版本)。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 localPort 属性。
ignoreRoleInstanceStatus 布尔型 可选。 当此属性的值设置为 true 时,服务的状态会被忽略,并且负载均衡器不会删除该终结点。 此值设置为 true 对调试服务的繁忙实例非常有用。 默认值是 false。 注意:即使角色不处于“就绪”状态,终结点仍可接收流量。
负载均衡探针 字符串 可选。 与输入终结点关联的负载均衡器探测的名称。 有关详细信息,请参阅 LoadBalancerProbe 架构

内部端点

InternalEndpoint 元素描述辅助角色的内部终结点。 内部终结点只可供服务中运行的其他角色实例使用,而不可供服务外部的客户端使用。 工作角色最多具有五个 HTTP、UDP 或 TCP 内部终结点。

下表介绍了 InternalEndpoint 元素的属性。

特征 类型 说明
姓名 字符串 必填。 内部终结点的唯一名称。
协议 字符串 必填。 内部终结点的传输协议。 可能的值为 HTTPTCPUDPANY

ANY 的值指定允许任何协议、任何端口。
港口 整数 (int) 可选。 用于终结点内部负载均衡连接的端口。 一个负载均衡的终结点使用两个端口。 用于公共 IP 地址的端口,以及用于专用 IP 地址的端口。 通常情况下,这些值设为相同,但你可以选择使用不同的端口。

可能的值介于 1 和 65535(包含在内)之间(Azure SDK 1.7 或更高版本)。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 Port 属性。

实例输入端点

InstanceInputEndpoint 元素描述工作角色的实例输入终结点。 实例输入终结点通过在负载均衡器中使用端口转发与特定的角色实例关联。 每个实例输入终结点映射到一系列可能端口中的特定端口。 此元素是 AllocatePublicPortFrom 元素的父级。

仅当使用 Azure SDK 1.7 或更高版本时,才提供 InstanceInputEndpoint 元素。

下表介绍了 InstanceInputEndpoint 元素的属性。

特征 类型 说明
姓名 字符串 必填。 终结点的唯一名称。
本地端口 整数 (int) 必填。 指定所有角色实例都要侦听的内部端口,以便接收从负载均衡器转发的传入流量。 可能的值介于 1 和 65535(含)之间。
协议 字符串 必填。 内部终结点的传输协议。 可能的值为 udptcp。 使用 tcp 处理基于 http/https 的流量。

从分配公网端口

AllocatePublicPortFrom 元素描述可供外部客户用来访问每个实例输入终结点的公共端口范围。 公共(VIP)端口号从此范围分配,并在租户部署和更新过程中分配给每个独立的角色实例终端。 此元素是 FixedPortRange 元素的父级。

仅当使用 Azure SDK 1.7 或更高版本时,才提供 AllocatePublicPortFrom 元素。

固定端口

FixedPort 元素指定内部终结点的端口,用于在该终结点上实现负载均衡的连接。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 FixedPort 元素。

下表介绍了 FixedPort 元素的属性。

特征 类型 说明
港口 整数 (int) 必填。 内部终结点的端口。 此属性的效果与将 FixedPortRange 最小值和最大值设置为同一端口一样。

可能的值介于 1 和 65535(包含在内)之间(Azure SDK 1.7 或更高版本)。

固定端口范围

FixedPortRange 元素指定分配给内部终结点或实例输入终结点的端口的范围,并设置用于在终结点上建立负载均衡连接的端口。

注释

FixedPortRange 元素的工作方式取决于它所在的元素。 当 FixedPortRange 元素位于 InternalEndpoint 元素中时,它会为运行角色的所有虚拟机打开负载均衡器上 min 和 max 属性范围内的所有端口。 当 FixedPortRange 元素位于 InstanceInputEndpoint 元素中时,它会在运行角色的每个虚拟机上只打开 min 和 max 属性范围内的一个端口。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 FixedPortRange 元素。

下表介绍了 FixedPortRange 元素的属性。

特征 类型 说明
分钟 整数 (int) 必填。 范围中的最小端口。 可能的值介于 1 和 65535(包含在内)之间(Azure SDK 1.7 或更高版本)。
最大值 字符串 必填。 范围内的最大端口。 可能的值介于 1 和 65535(包含在内)之间(Azure SDK 1.7 或更高版本)。

证书

Certificates 元素描述工作角色的证书集。 此元素是 Certificate 元素的父级。 一个角色可以包含任意数目的关联证书。 有关使用 certificates 元素的详细信息,请参阅使用证书修改服务定义文件

证书

Certificate 元素描述与作业角色关联的证书。

下表介绍了 Certificate 元素的属性。

特征 类型 说明
姓名 字符串 必填。 此证书的名称,用于在此证书与 HTTPS InputEndpoint 元素关联时对此证书进行引用。
店铺位置 字符串 必填。 本地计算机上的证书存储位置,可在其中找到此证书。 可能的值为 CurrentUserLocalMachine
商店名称 字符串 必填。 此证书在本地计算机上的存储位置名称。 可能的值包括内置存储名称 MyRootCATrustDisallowedTrustedPeopleTrustedPublisherAuthRootAddressBook,或任何自定义存储名称。 如果指定了自定义存储名称,则会自动创建存储。
权限等级 字符串 可选。 指定角色进程的访问权限。 如果您仅希望具有提升权限的进程能够访问私钥,请指定elevated权限。 limitedOrElevated 权限允许所有角色进程访问私钥。 可能的值为 limitedOrElevatedelevated。 默认值是 limitedOrElevated

进口

Imports 元素描述工作角色的导入的模块集,这些模块向来宾操作系统添加组件。 此元素是 Import 元素的父级。 此元素是可选的,一个角色只能有一个运行时块。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 Imports 元素。

进口

Import 元素指定要添加到来宾操作系统的模块。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 Import 元素。

下表介绍了 Import 元素的属性。

特征 类型 说明
模块名 字符串 必填。 要导入的模块的名称。 有效的导入模块为:

- RemoteAccess
- RemoteForwarder
- 诊断

借助 RemoteAccess 和 RemoteForwarder 模块,可配置远程桌面连接的角色实例。 有关详细信息,请参阅启用远程桌面连接

借助 Diagnostics 模块,可收集角色实例的诊断数据

运行时

Runtime 元素描述辅助角色的环境变量设置集,这些设置用于控制 Azure 主机进程的运行时环境。 此元素是 Environment 元素的父级。 此元素是可选的,一个角色只能有一个运行时块。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 Runtime 元素。

下表描述 Runtime 元素的属性:

特征 类型 说明
执行上下文 字符串 可选。 指定启动角色进程的上下文。 默认上下文为 limited

- limited – 不使用管理员特权启动进程。
- elevated – 需要管理员权限才能启动进程。

环境

Environment 元素描述某个工作者角色的环境变量设置集合。 此元素是 Variable 元素的父级。 一个角色可以包含任意数目的环境变量集。

变量

Variable 元素指定要在来宾操作系统中设置的环境变量。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 Variable 元素。

下表描述 Variable 元素的属性:

特征 类型 说明
姓名 字符串 必填。 要设置的环境变量的名称。
价值 字符串 可选。 要为环境变量设置的值。 必须包含 value 属性或 RoleInstanceValue 元素。

RoleInstanceValue

RoleInstanceValue 元素指定要从其中检索变量值的 xPath。

下表介绍了 RoleInstanceValue 元素的属性。

特征 类型 说明
xpath 字符串 可选。 实例的部署设置的位置路径。 有关详细信息,请参阅带有 XPath 的配置变量

必须包含 value 属性或 RoleInstanceValue 元素。

入口

EntryPoint 元素指定角色的入口点。 此元素是 NetFxEntryPoint 元素的父级。 借助这些元素,可以指定默认 WaWorkerHost.exe 以外的应用程序充当角色入口点。

仅当使用 Azure SDK 1.5 或更高版本时,才提供 EntryPoint 元素。

NetFxEntryPoint

NetFxEntryPoint 元素指定要为角色运行的程序。

注释

仅当使用 Azure SDK 1.5 或更高版本时,才提供 NetFxEntryPoint 元素。

下表介绍了 NetFxEntryPoint 元素的属性。

特征 类型 说明
程序集名称 字符串 必填。 包含入口点的程序集的路径和文件名称。 该路径相对于文件夹 %ROLEROOT%\Approot(请勿在命令行中指定 %ROLEROOT%\Approot,它是假定的)%ROLEROOT% 是由 Azure 维护的环境变量,表示角色的根文件夹位置。 \%ROLEROOT%\Approot 文件夹表示你的角色的应用程序文件夹。
目标框架版本 字符串 必填。 程序集所基于的 .NET Framework 版本。 例如,targetFrameworkVersion="v4.0"

ProgramEntryPoint

ProgramEntryPoint 元素指定要为角色运行的程序。 ProgramEntryPoint 元素用于指定不基于 .NET 程序集的程序入口点。

注释

仅当使用 Azure SDK 1.5 或更高版本时,才提供 ProgramEntryPoint 元素。

下表介绍了 ProgramEntryPoint 元素的属性。

特征 类型 说明
commandLine 字符串 必填。 要执行的程序的路径、文件名和任何命令行参数。 该路径相对于文件夹 %ROLEROOT%\Approot(请勿在命令行中指定 %ROLEROOT%\Approot,它是假定的)%ROLEROOT% 是由 Azure 维护的环境变量,表示角色的根文件夹位置。 %ROLEROOT%\Approot 文件夹表示角色的应用程序文件夹。

如果程序结束,该角色会被回收,所以通常会将程序设置为持续运行,而不是一个只执行有限任务的程序。
在进程启动时设置为准备状态 布尔型 必填。 指定角色实例是否等待命令行程序发出已启动信号。 此时,此值必须设置为 true。 保留将该值设置为 false 这一操作,供将来使用。

初创公司

Startup 元素描述角色启动时运行的任务的集合。 此元素可以是 Variable 元素的父级。 有关使用角色启动任务的详细信息,请参阅如何配置启动任务。 此元素是可选的,一个角色只能有一个启动块。

下表描述 Startup 元素的属性。

特征 类型 说明
优先级 整数 (int) 仅供内部使用。

任务

Task 元素指定在角色启动时发生的启动任务。 启动任务可用于执行准备角色以运行的任务,如安装软件组件或运行其他应用程序。 这些任务会按照它们在 Startup 元素块中出现的顺序执行。

仅当使用 Azure SDK 1.3 或更高版本时,才提供 Task 元素。

下表介绍了 Task 元素的属性。

特征 类型 说明
commandLine 字符串 必填。 包含要运行的命令的脚本(如 CMD 文件)。 启动命令和批处理文件必须以 ANSI 格式保存。 在文件开头设置字节顺序标记的文件格式无法得到正确处理。
执行上下文 字符串 指定在其中运行脚本的上下文。

- limited [默认] – 使用与托管进程的角色相同的特权运行。
- elevated – 使用管理员特权运行。
任务类型 字符串 指定指令的执行方式。

- simple [默认] – 系统等待任务退出,然后再启动其他所有任务。
- background - 系统不会等待任务退出。
- foreground - 类似于后台,但在所有前台任务退出之前,不会重新启动该角色。

内容

Contents 元素描述工作角色的内容集。 此元素是 Content 元素的父级。

仅当使用 Azure SDK 1.5 或更高版本时,才提供 Contents 元素。

内容

Content 元素定义要复制到 Azure 虚拟机的内容的源位置,以及要复制到的目标路径。

仅当使用 Azure SDK 1.5 或更高版本时,才提供 Content 元素。

下表介绍了 Content 元素的属性。

特征 类型 说明
目的地 字符串 必填。 内容放置在 Azure 虚拟机上的位置。 此位置相对于文件夹 %ROLEROOT%\Approot

此元素是 SourceDirectory 元素的父元素。

SourceDirectory

SourceDirectory 元素定义要从中复制内容的本地目录。 使用此元素指定要复制到 Azure 虚拟机的本地内容。

仅当使用 Azure SDK 1.5 或更高版本时,才提供 SourceDirectory 元素。

下表介绍了 SourceDirectory 元素的属性。

特征 类型 说明
路径 字符串 必填。 复制其内容到 Azure 虚拟机的本地目录的相对或绝对路径。 支持扩展目录路径中的环境变量。

另请参阅

云服务(经典)定义架构