<legacyImpersonationPolicy> 元素

指定 Windows 标识不流经异步点,而不考虑当前线程上执行上下文的流设置。

configuration
  runtime
    <legacyImpersonationPolicy>

语法

<legacyImpersonationPolicy
   enabled="true|false"/>  

特性和元素

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

特性

属性 描述
enabled 必需的特性。

指定无论当前线程上的 ExecutionContext流设 置如何,WindowsIdentity 都不会跨异步点流动。

enabled 特性

说明
false 根据当前线程的 ExecutionContext 流设置,WindowsIdentity 可以跨异步点流动。 这是默认值。
true 无论当前线程的 ExecutionContext 流设置如何,WindowsIdentity 都不会跨异步点流动。

子元素

无。

父元素

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

备注

在 .NET Framework 1.0 和 1.1 版本中,WindowsIdentity 不流经任何用户定义的异步点。 从 .NET Framework 2.0 版本开始,有一个 ExecutionContext 对象包含有关当前正在执行的线程的信息,并跨应用程序域中的异步点流动。 WindowsIdentity包含在此执行上下文中,因此也会跨异步点流动,这意味着如果存在模拟上下文,则也会流动。

从 .NET Framework 2.0 开始,可以使用 <legacyImpersonationPolicy> 元素来指定 WindowsIdentity 不跨异步点流动。

注意

公共语言运行时 (CLR) 识别使用托管代码执行的模拟操作,而不识别在托管代码外部执行的模拟操作,例如通过平台调用非托管代码或直接调用 Win32 函数。 只有托管的 WindowsIdentity 对象才能跨异步点流动 alwaysFlowImpersonationPolicy,除非元素已设置为 true (<alwaysFlowImpersonationPolicy enabled="true"/>)。 将 alwaysFlowImpersonationPolicy 元素设置为 true,指定 Windows 标识始终流经异步点,而不考虑执行模拟的方式。 有关跨异步点流动非托管模拟的详细信息,请参阅 <alwaysFlowImpersonationPolicy >元素

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

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

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

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

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

有关详细信息,请参阅 <alwaysFlowImpersonationPolicy >元素

配置文件

在 .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>  
      <legacyImpersonationPolicy enabled="true"/>  
   </runtime>  
</configuration>  

请参阅