WCF服务使用模拟调用另一个

时间:2016-12-16 11:24:32

标签: c# wcf impersonation

我正面临一些冒充问题。

用户(username = myLogin)必须在服务器(server_A)上调用WCF服务(WebService_A)。此服务将在服务器(server_B)上调用另一个WCF服务(WebService_B)。

我希望WebService_B获取初始调用者的身份(“myLogin”)。

代码如下:

客户:

var proxyA = new WebService_A();
var result = proxyA.GetDataFromA();

网络服务A:

public IEnumerable<string> GetDataFromA()
{
   var winIdentity = OperationContext.Current.ServiceSecurityContext.WindowsIdentity;
   using (winIdentity.Impersonate())
   {
       using (var channelFactory = new ChannelFactory<IWebServiceA>("WebService_A"))
       {
           var proxy = channelFactory.CreateChannel();
           var resut = proxy.GetDataFromB().ToList();
       };
   } 
}

我试过这个,结果相同

public IEnumerable<string> GetDataFromA()
{
   using (var proxy = new WebService_A("*"))
   {
       proxy.ChannelFactory.Credential.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonate;
       var resut = proxy.GetDataFromB().ToList();
   };
} 

网络服务B:

public IEnumerable<string> GetDataFromB()
{
   using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
   {
       return WindowsIdentity.GetCurrent().Name;
   }
}

调用GetDataFromB()后,我得到FileLoadExceptionthe file or assembly System.IdentityModel.Selectors is not found

0 个答案:

没有答案