Windows窗体调用Web服务但需要模拟其他Windows用户

时间:2010-08-10 07:20:36

标签: c# winforms wcf

我有一个Windows窗体应用程序(4.0),它调用Web服务(WCF)但需要模拟与当前登录到机器的用户不同的用户。怎么办?现在,Web服务无法返回记录,因为用户没有权限。我需要使用不同的用户进行Web服务调用。

1 个答案:

答案 0 :(得分:4)

从我的应用程序中我这样做:

NetworkCredential credentials = new NetworkCredential(user, pw, userDomain);

//  This is the client generated by the WCF Service Reference
AppClient appClient = new AppClient();

appClient.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
appClient.ClientCredentials.Windows.ClientCredential = credentials;

appClient.MyWcfServiceCall();

现在,对WCF服务的调用将在提供的凭据下完成。必须修改您的WCF服务方法以允许模拟:

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)]

[OperationBehavior(Impersonation = ImpersonationOption.Required)]

取决于您的需求。

在WCF服务中,您有以下有关登录用户的信息:

OperationContext.Current.ServiceSecurityContext
Thread.CurrentPrincipal.IsInRole(roleName)
Thread.CurrentPrincipal.Identity

您还可以查看LogonUser()其他假冒方法:http://msdn.microsoft.com/en-us/library/ff647404.aspx#paght000023_impersonatingusinglogonuser

HTH! 詹姆斯