<alwaysFlowImpersonationPolicy> 元素

指定无论如何执行模拟,Windows 标识始终在异步点之间流动。

<配置>
   <运行时>
     <alwaysFlowImpersonationPolicy>

语法

<alwaysFlowImpersonationPolicy
  enabled="true|false"/>  

属性和元素

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

属性

属性 描述
enabled 必需属性。

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

enabled Attribute

价值 描述
false 除非模拟是通过托管方法(如 Impersonate)执行的,否则 Windows 标识不会流经异步点。 这是默认值。
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 函数 函数时指定特殊标志。 若要为整个进程启用兼容性模式,请将 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>  

另请参阅