<legacyImpersonationPolicy> 元素

指定无论当前线程上的执行上下文的流设置如何,Windows 标识都不会跨异步点流动。

<配置>
   <运行时>
     <legacyImpersonationPolicy>

语法

<legacyImpersonationPolicy
   enabled="true|false"/>  

属性和元素

以下部分介绍属性、子元素和父元素。

属性

属性 描述
enabled 必需属性。

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

enabled Attribute

价值 描述
false WindowsIdentity 流跨异步点的流,具体取决于当前线程的 ExecutionContext 流设置。 这是默认值。
true WindowsIdentity 不会流过异步点,而不考虑当前线程上的 ExecutionContext 流设置。

子元素

没有。

父元素

元素 描述
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> Element

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

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

    可以使用 ExecutionContext.SuppressFlowSecurityContext.SuppressFlowWindowsIdentitySecurityContext.SuppressFlow 方法修改 ExecutionContextSecurityContext 设置,从而按线程禁止流。

  2. 在调用非托管宿主接口以加载公共语言运行时(CLR)。

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

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

配置文件

在 .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>  

另请参阅