C# WCF Web服务-同一服务器上的多跳模拟

C# WCF Web服务-同一服务器上的多跳模拟,c#,.net,wcf,web-services,impersonation,C#,.net,Wcf,Web Services,Impersonation,我有3个web服务,都位于同一台服务器上 我的客户机调用服务A,它模拟客户机调用服务B,一切正常 现在,我想模拟服务B的调用方(这是我的用户名)来调用服务C。当我使用与以前相同的技术(AllowedImpersonationLevel=impersonate,user.impersonate())时,用户不会被传递到服务C。相反,服务C将用户视为我在IIS中运行它的用户(这是一个UPN,不是标准的网络服务帐户) 我需要做什么特别的事情才能让它正常工作?这是一个委派问题吗?(我认为这不是委派,因为

我有3个web服务,都位于同一台服务器上

我的客户机调用服务A,它模拟客户机调用服务B,一切正常

现在,我想模拟服务B的调用方(这是我的用户名)来调用服务C。当我使用与以前相同的技术(AllowedImpersonationLevel=impersonate,user.impersonate())时,用户不会被传递到服务C。相反,服务C将用户视为我在IIS中运行它的用户(这是一个UPN,不是标准的网络服务帐户)

我需要做什么特别的事情才能让它正常工作?这是一个委派问题吗?(我认为这不是委派,因为它们都在同一台服务器上)


非常感谢!

您可以尝试在服务C上启用ASP.Net兼容性

在Web.cofig中

<system.web>
   <identity impersonate="true"/>
   <authentication mode="Windows"/>
</system.web>
<system.serviceModel>
   <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>

由于您两次跨越流程边界,我本来希望必须使用委派。您尝试过TokenImpersonationLevel.delegation吗?

在这种情况下您需要委派。您需要的配置是ImpersonationLevel.delegation(在配置或代码中设置)。请查看codeplex上的WCF安全指南。这是一个非常好的源代码。在实现委派时,特别是在生产环境中,要小心,要求不仅仅是在配置文件中选择正确的选项。您需要确保您连接的应用程序(例如SQL server)已配置为委派,并且在active directory等中满足某些基础架构要求,例如服务主体名称(SPN)

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service : IService
{
    public string ExecuteRequest(string xmlRequest)
    {
        IRequestManager requestManager = new RequestManager();
        return requestManager.ProcessRequest(xmlRequest);
    }

}