WCF 模拟错误调用 ASMX

WCF Impersonation Error Calling ASMX

我有一个 Web 应用程序正在调用 WCF 方法,并根据需要设置了模拟。在这种方法中,我需要调用 returns 安全组的另一个 Web 服务 (ASMX)。问题是,在将 Impersonation 设置为 Required 的情况下,当我尝试创建 ASMX 服务的实例时出现错误。

WCF 服务方法

[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public List<MacroTypeInfo> GetFilteredMacroDataTypes(MacroDataTypeSection section)
{

    // Errors out here
    using (var login = new local.intranet.webservices.login())
    {
        login.getSecurityGroupsForUser(); // Never gets to this line
    }    

}

我得到的错误是

Either a required impersonation level was not provided, or the provided    
impersonation level is invalid. (Exception from HRESULT: 0x80070542)

我还必须做些什么才能在这个 Impersonation 所需的方法中调用这个 Web 服务吗?只要我删除了 OperationBehavior 属性,调用就会起作用。

除非获得许可,否则服务器无法模拟远程服务器的客户端。您可以了解不同级别的模拟 here

如果需要此类模拟,客户端必须明确允许模拟级别为 Delegation

您可以使用以下终结点行为配置在 WCF 客户端中实现此目的:

<endpointBehaviors>
    <behavior name="delegateIdentity">
      <clientCredentials>
        <windows allowedImpersonationLevel="Delegation"/>
      </clientCredentials>
    </behavior>
</endpointBehaviors>

如果您使用的是生成的代理,您可以在代理上设置此值:

client.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel =
    System.Security.Principal.TokenImpersonationLevel.Delegation;

最后,如果您使用 ChannelFactory<T> 创建代理,您只需在 ChannelFactory<T>.

上设置与上面相同的值