2010-05-26 99 views
3

我有3个Web服务,全部位于同一台服务器上。WCF Web Services - 同一台服务器上的多跳模拟

我的客户端呼叫服务A,它模拟客户端调用服务B,一切都很好。

现在,我想模拟服务B(这是我的用户名)的调用者来调用服务C.当我使用与以前相同的技术(AllowedImpersonationLevel = Impersonate,user.Impersonate())时,用户不会传递给服务C.相反,服务C将用户看作我在IIS下运行的用户(这是一个UPN,而不是标准的NETWORK SERVICE帐户)。

有什么特别的我需要做得到这个工作?这是代表团的问题吗? (我认为这不会是委派,因为它们都在同一台服务器上)

谢谢!

回答

0

在这种情况下您需要授权。您需要的配置是ImpersonationLevel.Delegation(在配置或代码中设置)。查看关于codeplex的WCF安全指南,它是一个非常好的来源。在实现委派时要小心,特别是在生产环境中,要求不仅仅是在配置文件中选择正确的选项。您需要确保您连接的应用程序,例如SQL服务器)配置为进行委派,并且在活动目录等内满足某些基础结构要求,例如服务主体名称(SPN)。

0

您可以尝试在服务C

打开ASP.Net兼容性在Web.cofig

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

在服务类

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

} 
0

我本来期望有使用因为你跨越了进程边界两次。你尝试过TokenImpersonationLevel.Delegation吗?

相关问题