Windows Server AppFabric 中的配置过程

IIS Manager 的 AppFabric 扩展和 AppFabric 的 Windows PowerShell cmdlet 为应用程序所有者或 IT 专业人员提供简单的方法以配置基于 WCF 或 WF 服务的应用程序。 本主题介绍当您在 IIS Manager 扩展或通过 AppFabric 配置 cmdlet 配置服务或应用程序时在 Web.config 文件中发生的情况。 本主题首先介绍在配置服务中使用的 Web.config 文件;然后介绍直接配置服务的方式;最后介绍为要继承的服务配置默认值。

有关使用 ASP.NET 中 Web.config 文件的详细信息,请参阅 ASP.NET Configuration

Web.config 文件的层次结构

IIS 配置层次结构中的每个项目都可以有其自己的 Web.config 文件,并且服务可以从与服务器、站点、应用程序或该服务所属的子目录相关联的 Web.config 文件继承默认的配置设置。 因此,服务的配置通过 Web.config 文件的层次结构进行定义。 本部分介绍确定层级结构中哪个 Web.config 文件定义服务的配置的规则,以及这些文件中的哪个元素优先。

在服务器上安装 AppFabric 之后,会在与 Machine.config 文件 (<drive>:\Windows\Microsoft.NET\Framework\v4.0.xxxxx\Config) 相同的目录中创建服务器 Web.config 文件(如果该文件已经不存在)。 该服务器 Web.config 文件中的配置启用服务跟踪、工作流暂留和工作流实例管理。 对于位于网站目录 (<drive>:\inetpub\wwwroot) 中的网站,应用程序根目录中的应用程序,以及对于应用程序子目录,也可以具有 Web.config 文件。 站点、应用程序和子目录 Web.config 文件不通过 AppFabric 安装程序进行安装。 无论何时您尝试使用 IIS Manager 的 AppFabric 扩展在作用域内更改配置,并且在该作用域内不存在 Web.config 文件,系统都会为您创建 Web.config 文件。

位于任意级别的 Web.config 文件都可以包含直接应用于服务的配置设置,但是如果您要直接在 IIS Manager UI 中定义服务,则需要在应用程序 Web.config 文件中处理服务定义。 除了这些设置之外,服务器、站点、应用程序和子目录级别的 Web.config 文件可以包含由服务继承的默认配置设置。 IIS Manager UI 的 AppFabric 扩展设置的应用程序配置和配置 cmdlet 只会对 Web.config 文件产生影响,不会对 machine.config 或在环境配置中定义的其他文件产生影响。 此规则的一个例外是:在服务器级别对 applicationHost.config 文件中的应用程序定义了自动启动。

Web.config 文件包含具有指定配置设置属性的 XML 标记和子标记的嵌套层次结构。 对于基于 WCF 和 WF 服务的某些配置设置在服务行为中进行定义。 在 AppFabric 中,大多数但并非所有的配置工具都可以编辑行为。 但是,某些配置设置在服务行为外部进行定义。 例如,服务的监控、终结点地址和绑定传输配额在 Web.config 文件内,而非行为外部进行配置。 事件收集器和系统诊断配置(均作用于应用程序级别或更高级别)不在行为中定义。

备注

AppFabric 使用 Microsoft Web Administration (MWA) 管理配置。 MWA 要求为所有配置元素创建架构。 有关如何为自定义行为创建架构的信息,请参阅Extending IIS 7.0 Schema and Accessing the Custom Sections Using MWA

直接配置服务

可以使用 Web.config 文件中已命名的服务行为配置服务。 为此,在 Web.config 文件中输入具有指向服务行为标记的 behaviorConfiguration 属性的<服务>标记。 可以在应用程序级别或更高级别为 Web.config 文件中的服务定义已命名的行为。 下面是命名为 TestService 的服务(该服务的配置使用名称 TestGetMetaData 在已命名的服务行为中定义)示例:

<system.serviceModel>
   <services>
      <service name="TestService" behaviorConfiguration="TestGetMetaData" >
         <endpoint address="/TestService" binding="wsHttpBinding" contract="ITestService"/>
         <endpoint address="mex"  binding="mexHttpBinding"  contract="IMetadataExchange"/>
      </service>
   </services>

   <behaviors>
      <serviceBehaviors>
         <behavior name="TestGetMetaData"> <serviceMetadata httpGetEnabled="true" httpGetUrl=""/> </behavior>
      </serviceBehaviors>
   </behaviors>
</system.serviceModel>

在 .NET Framework 3.5 中,配置服务的许多方面的最简单方法是使用服务的应用程序(或子目录)Web.config 文件中已命名的服务行为。 在 .NET Framework 4.0 中,新 模板支持使用无名称的行为,这样服务可以继承默认的配置。 有关详细信息,请参阅本节后续部分中的“为要继承的服务配置默认值”。

AppFabric 配置工具修改以下服务行为:

  • sqlWorkflowInstanceStore(暂留)

  • etwTracking(监控)

  • serviceThrottling(性能)

  • serviceCredentials/serviceCertificate(安全)

  • workflowIdle

  • workflowUnhandledException

  • workflowInstanceManagement

为要继承的服务配置默认值

使用应用程序 Web.config 文件中已命名的服务行为不是配置服务的唯一方法。 对于服务所属的服务器、站点、应用程序和子目录,该服务也可以从 Web.config 文件继承默认的配置设置。 基于 WCF 和基于 WF 服务的某些默认配置设置在无名称的服务行为内进行定义。

使用无名称的行为

如果存在已命名的服务行为,并且该服务的 behaviorConfiguration 属性指向此行为,则该服务将使用已命名行为中的设置。 也继承以上级别中具有相同名称的任何其他已命名行为中的设置。 该服务将不会使用在应用于它的子目录、应用程序、站点和服务器的 Web.config 文件中定义的默认服务行为设置。 但是,您可以在应用程序 Web.config 文件中更改<服务>标记,以便该服务将继承默认值。 通过在 Web.config 文件中为一个或多个级别定义无名称的服务行为,以及指定您的服务使用该无名称的行为,从而完成操作。 当服务元素的 behaviorConfiguration 属性的名称设置为空字符串时,服务将使用无名称的行为,如以下代码所示:

<services>
   <service name=”TutorialService” behaviorConfiguration=””
      <endpoint address=”” binding=”wsHttpBinding” contract=”IService” />
   </service>
</services>

如以下代码所示,不保留 behaviorConfiguration 属性具有相同的效果。 上面,是显式使用无名称的行为,而下面则是隐式使用。

<services>
   <service name=”TutorialService”
      <endpoint address=”” binding=”wsHttpBinding” contract=”IService” />
   </service>
</services>

无名称的 behaviorConfiguration 元素的作用是:服务将从定义在 serviceBehavior 元素中的一个或多个无名称行为继承其配置。 下面是在服务器级别默认定义的无名称的 serviceBehavior 元素。 服务器的默认配置(由 AppFabric 安装程序创建)启用服务跟踪、工作流暂留和工作流实例管理。

<behaviors>
   <serviceBehaviors>
      <behavior name=””>
         <workflowIdle timeToUnload="00:01:00" timeToPersist="infinite" />
         <workflowInstanceManagement authorizedWindowsGroup=”AS_Administrators" />
         <etwTracking profileName="HealthMonitoring Tracking Profile" />
      </behavior>
   </serviceBehaviors>
</behaviors>

无名称的行为可以在层次结构任意级别的 Web.config 文件中定义。 如果无名称的行为在包含服务的多个级别中进行定义,则服务的配置将由在其层次结构中定义的每个无名称行为的合并设置组成。 如果服务的层次结构中的两个或多个无名称的行为包含冲突设置,则会使用处于较低或最低级别的设置。 从多个无名称的行为中为服务聚合配置设置的过程称为行为合并。

删除和清除标记也可以用于 Web.config 文件中的行为部分。 删除标记删除包含该删除标记的无名称行为的设置。 清除标记删除服务的所有行为。

behaviorConfiguration 设置为空字符串的所有服务都将继承其层次结构中定义的无名称行为的默认配置值。 在 Web.config 文件中一个级别只能有一个无名称行为。

在隐式(也称为“无标记”)服务中,隐式使用无名称行为(不选中 behaviorConfiguration 属性)。 无标记服务是未在 Web.config 文件中声明的服务。 该服务在 Web.config 文件中没有相关联的服务节点。 默认情况下,Visual Studio 10 中的新项目类型创建无标记服务。 当运行时遇到无标记服务时,会自动将从适用无名称行为中合并的默认值应用到该服务。 请注意,在 IIS Manager 扩展中您无法修改无标记服务的终结点;若要执行此操作,必须将已命名的服务元素添加到 Web.config 文件。

对于基于 WCF 和 WF 服务的某些默认配置设置在无名称服务行为内部进行定义,而其他设置则在无名称服务行为外部进行定义。 例如,对于连接字符串或集合,服务将继承层次结构中所有配置文件中的配置值。

在 IIS Manager 中配置默认值

您可以在 IIS Manager UI 的 AppFabric 扩展中直接配置应用程序。 执行此操作时,AppFabric 在适用的 Web.config 文件中(通常在应用程序级别)设置已命名的服务行为。 您也可以使用 IIS Manager 来更改服务配置以使用子目录、应用程序、站点和服务器级别的默认值,而不是直接配置服务。 当您执行该操作时,Web.config 文件的无名称行为将发生更改。 AppFabric 执行行为合并以创建完整的应用程序配置参数集。

如果在两个或多个 Web.config 文件中将相同的配置属性设置到不同的值,则 AppFabric 将使用来自较低或最低级别的值。 从应用的 Web.config 文件的无名称行为中填充服务的“配置服务”对话框字段。 您可以在服务级别的配置 UI 中更改这些值,在这种情况下将会更改相应应用程序的无名称行为。 或者在子目录、站点和服务器级别更改默认值。 如果您在创建应用程序无名称行为后,更改处于较高级别的无名称行为中的默认设置,对较高级别无名称行为的更改将被传播到服务级别,除非该服务在较低级别上被覆盖了。

若要在 IIS Manager 中为应用程序、子目录、站点或服务器级别定义默认设置,则在“连接”窗格中选择级别,然后在“管理 WCF 和 WF 服务”下面的“操作”窗格中单击“配置”。 您也可以在“连接”窗格中右键单击级别,指向“管理 WCF 和 WF 服务”,然后单击“配置”。 该操作会显示级别的“配置”对话框。 当您在 UI 中更改某个级别的默认设置时,如果不存在该级别的 Web.config 文件,则 AppFabric 会创建一个。

在 IIS Manager 的 AppFabric 扩展中,当您配置服务时,不需要选择将要使用的已命名的行为配置。 在服务的“配置服务”对话框中输入值或进行选择;AppFabric 会编辑 Web.config 文件。 您也可以使用 AppFabric 的 Windows PowerShell cmdlet 来设置许多行为配置设置。

使用位置标记

AppFabric 支持在 Web.config 文件中的位置标记上的读取操作。 除了使用已命名的服务行为或使用无名称服务行为或无标记服务定义默认行为之外,位置标记是定义服务配置的另一种方法。 位置标记是嵌入在 Web.config 文件中的元素,可以将配置设置应用到明确标记的实体。 位置标记包含一个或多个配置设置。 还包含指定配置属性将应用到的实体的路径。 与已命名的服务行为(必须位于相应应用程序 Web.config 文件的<服务>节点中)不同,可以将位置标记输入到任意 Web.config 文件。 与无名称的行为不同,位置标记不需要应用程序 Web.config 文件的<服务>节点中的无名称 behaviorConfiguration 元素以使其可用。

以下是站点 Web.config 文件中将配置设置应用到应用程序 app1 中的服务 s1 的位置标记的示例:

<location path=”app1/s1.svc” overrideMode=”Allow”>
   <defaultDocument enabled=”true”>
      <files>
         <add value=”Developer.htm” />
      </files>
   </defaultDocument>
</location>

如果未声明路径,则该路径来自于位置标记定义的级别,并且在所有子路径下面(等同于指定一个点 (.))。 在 applicationHost.config 中执行此操作导致指定全局级的配置。 如果将位置标记中的 overrideMode 元素设置为“允许”,则可以编辑和替代处于层次结构较低级别的位置标记中设置的配置。 如果未设置 overrideMode 元素并且存在多个为相同服务中的相同配置设置指定不同值的位置标记,则将应用一组优先级规则以确定使用哪个设置。

在 IIS Manager UI 的 AppFabric 扩展中或通过 AppFabric 配置 cmdlet 无法更改从位置标记应用到服务的配置设置。 对于 UI 或 cmdlet,位置标记的内容为只读。 如果您尝试使用 IIS Manager 或 cmdlet 更改位置标记,则该操作会返回一个错误。 若要更改位置标记应用的设置,则您需要手动更改 Web.config 文件中的位置标记。

回收

任何时候您在 IIS Manager 的“配置服务”对话框中单击“应用”或“确定”、更改 Web.config 文件时,系统都会回收相关的应用程序域。 任何时候您单击“应用”或“确定”以在子目录、应用程序、站点或服务器级别建立默认设置、更改相应的 Web.config 文件时,都将回收该作用域下面所有服务的应用程序域。 为了降低回收成本,我们建议您最大限度地减少您导致的重新配置进程的数量(尤其在较高级别)。 当您配置默认值时,应当按如下方式进行操作: 首先配置服务器默认值和站点默认值(按任意顺序),然后导入您的应用程序,再配置其包含的应用程序和服务。 此顺序的原因是配置默认值可以导致回收所有的树。 如果可能,则在所有应用程序实际运行之前执行配置步骤以避免回收应用程序的成本。

  2011-12-05