<alwaysFlowImpersonationPolicy> 元素

指定 Windows 标识始终流经异步点,而不考虑执行模拟的方式。

configuration
  runtime
    <alwaysFlowImpersonationPolicy>

语法

<alwaysFlowImpersonationPolicy
  enabled="true|false"/>  

特性和元素

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

特性

属性 描述
enabled 必需的特性。

指示 Windows 标识是否跨异步点流动。

enabled 特性

说明
false Windows 标识不会流经异步点,除非通过 Impersonate 等托管方法执行模拟标识。 这是默认值。
true Windows 标识始终流经异步点,而不考虑执行模拟的方式。

子元素

无。

父元素

元素 说明
configuration 公共语言运行时和 .NET Framework 应用程序所使用的每个配置文件中的根元素。
runtime 包含有关程序集绑定和垃圾回收的信息。

注解

在 .NET Framework 1.0 和 1.1 版本中,Windows 标识不会跨流经异步点。 在 .NET Framework 2.0 版本中,有一个 ExecutionContext 对象包含有关当前正在执行的线程的信息,并跨应用程序域中的异步点流动。 WindowsIdentity 也作为流经异步点的信息的一部分流动,前提是模拟是使用 Impersonate 等托管方法实现的,而不是通过对本机方法的平台调用等其他方式实现的。 此元素用于指定 Windows 标识确实跨异步点流动,而不管模拟是如何实现的。

可以通过其他两种方式更改此默认行为:

  1. 在基于每个线程的托管代码中。

    通过使用 ExecutionContext.SuppressFlowSecurityContext.SuppressFlowWindowsIdentitySecurityContext.SuppressFlow 方法修改 ExecutionContextSecurityContext 设置,可以在每个线程的基础上抑制流。

  2. 在对非托管托管接口的调用中加载公共语言运行时 (CLR)。

    如果使用非托管托管接口(而不是简单的托管可执行文件)来加载 CLR,可以在对 CorBindToRuntimeEx Function 函数的调用中指定一个特殊标志。 若要为整个过程启用兼容模式,请将 CorBindToRuntimeEx 函数的 flags 参数设置为 STARTUP_ALWAYSFLOW_IMPERSONATION

配置文件

在 .NET Framework 应用程序中,此元素只能在应用程序配置文件中使用。

对于 ASP.NET 应用程序,可以在 <Windows 文件夹>\Microsoft.NET\Framework\vx.x.xxxx 目录下的 aspnet.config 文件中配置模拟流。

ASP.NET 使用以下配置设置默认禁用 aspnet.config 文件中的模拟流:

<configuration>  
   <runtime>  
      <legacyImpersonationPolicy enabled="true"/>  
      <alwaysFlowImpersonationPolicy enabled="false"/>  
   </runtime>  
</configuration>  

在 ASP.NET 中,如果要允许模拟流,则必须显式使用以下配置设置:

<configuration>  
   <runtime>  
      <legacyImpersonationPolicy enabled="false"/>  
      <alwaysFlowImpersonationPolicy enabled="true"/>  
   </runtime>  
</configuration>  

示例

下面的示例演示如何指定 Windows 标识在异步点之间流动,即使模拟是通过托管方法外的其他方法实现的。

<configuration>  
  <runtime>  
    <alwaysFlowImpersonationPolicy enabled="true"/>  
  </runtime>  
</configuration>  

另请参阅