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>
.
上设置与上面相同的值
我有一个 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>
.