<serviceHostingEnvironment>

此元素定义服务主机环境要为特定传输实例化的类型。 如果此元素为空,则使用默认类型。 此元素只能在应用程序或计算机级别的配置文件中使用。

configuration
  system.serviceModel
    <serviceHostingEnvironment>

语法

<serviceHostingEnvironment aspNetCompatibilityEnabled="Boolean"
                           minFreeMemoryPercentageToActivateService="Integer"
                           multipleSiteBindingsEnabled="Boolean">
  <baseAddressPrefixFilters>
    <add prefix="string" />
  </baseAddressPrefixFilters>
  <serviceActivations>
    <add factory="String"
         service="String" />
  </serviceActivations>
  <transportConfigurationTypes>
    <add name="String"
         transportConfigurationType="String" />
  </transportConfigurationTypes>
</serviceHostingEnvironment>

特性和元素

下列各节描述了特性、子元素和父元素。

特性

属性 说明
aspNetCompatibilityEnabled 一个布尔值,指示是否已为当前应用程序启用了 ASP.NET 兼容模式。 默认值为 false

当此属性设置为 true 时,对 Windows Communication Foundation (WCF) 服务的请求将流经 ASP.NET HTTP 管道,而通过非 HTTP 协议的通信将被禁止。 有关详细信息,请参阅 WCF 服务和 ASP.NET
minFreeMemoryPercentageToActivateService 一个整数,指定在可以激活 WCF 服务之前,系统应该具有的最小可用内存量。 注意:若将此属性连同 WCF 服务的 web.config 文件中的部分信任一起指定,会导致在该服务运行时发生 SecurityException
multipleSiteBindingsEnabled 一个布尔值,指定是否对每个站点启用多个 IIS 绑定。

IIS 由网站组成,这些网站是包含虚拟目录的虚拟应用程序的容器。 可通过一个或多个 IIS 绑定访问站点上的应用程序。 一个 IIS 绑定提供两条信息:绑定协议和绑定信息。 绑定协议定义进行通信所依据的方案,而绑定信息是用于访问站点的信息。 绑定协议的一个示例可以是 HTTP,而绑定信息可包含 IP 地址、端口、主机标头等。

IIS 支持一个站点指定多个 IIS 绑定,这会导致一个方案有多个基址。 但是,托管在一个站点下的 Windows Communication Foundation (WCF) 服务允许每个方案只绑定一个 baseAddress。

若要为 Windows Communication Foundation (WCF) 服务对每个站点启用多个 IIS 绑定,请将此属性设置为 true。 请注意,仅对 HTTP 协议支持多个站点绑定。 配置文件中的终结点地址需要是一个完整的 URI。

子元素

元素 说明
<baseAddressPrefixFilters> 一个配置元素的集合,这些元素指定服务主机所使用的基址的前缀筛选器。
<serviceActivations> 一个描述激活设置的配置节。
<transportConfigurationTypes> 一个配置元素的集合,这些元素标识特定传输的类型。

父元素

元素 说明
serviceModel 所有 Windows Communication Foundation (WCF) 配置元素的根元素。

备注

默认情况下,WCF 服务和 ASP.NET 一起在寄宿应用程序域 (AppDomain) 中并行运行。 即使 WCF 和 ASP.NET 可以在同一 AppDomain 中共存,但在默认情况下,ASP.NET HTTP 管道不会处理 WCF 请求。 因此,WCF 服务不能使用 ASP.NET 应用程序平台的一些元素, 其中包括:

  • ASP.NET File/URL 授权

  • ASP.NET 模拟

  • 基于 Cookie 的会话状态

  • HttpContext.Current

  • 通过自定义 HttpModule 获得的管道扩展性

如果要使 WCF 服务在 ASP.NET 上下文中正常工作并仅通过 HTTP 进行通信,则可以使用 WCF 的 ASP.NET 兼容模式。 当 aspNetCompatibilityEnabled 属性在应用程序级别中设置为 true 时,此模式将启用。 服务实现必须使用 AspNetCompatibilityRequirementsAttribute 类来声明其可以在兼容模式中运行。 当启用此兼容模式时,

  • ASP.NET File/URL 授权将在 WCF 授权之前强制执行。 授权决定是基于请求的传输级标识的。 消息级别的标识将被忽略。

  • WCF 服务操作开始是在 ASP.NET 模拟上下文中执行的。 如果为某个特定服务同时启用了 ASP.NET 模拟和 WCF 模拟,则将应用 WCF 模拟上下文。

  • 可以通过 WCF 服务代码使用 HttpContext.Current,并且阻止服务公开非 HTTP 终结点。

  • WCF 请求由 ASP.NET 管道处理。 已配置为对传入请求执行操作的 HttpModule 也可以处理 WCF 请求。 这些 HttpModule 可包括 ASP.NET 平台组件(如 SessionStateModule)以及自定义第三方模块。

示例

下面的代码示例演示如何启用 ASP 兼容模式。

代码

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

另请参阅