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

C# WCF服务使用模拟调用另一个WCF服务,c#,wcf,impersonation,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(); Web服务A: public I

我面临一些模仿问题

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

我希望WebService_B能够获取初始调用方的身份(“myLogin”)

代码如下所示:

客户:

var proxyA = new WebService_A();
var result = proxyA.GetDataFromA();
Web服务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 GetDataFromA()
{
var winIdentity=OperationContext.Current.ServiceSecurityContext.WindowsIdentity;
使用(winIdentity.Impersonate())
{
使用(var channelFactory=newchannelfactory(“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();
   };
} 
public IEnumerable GetDataFromA()
{
使用(var proxy=newwebservice_A(“*”))
{
proxy.ChannelFactory.Credential.Windows.AllowedImpersonationLevel=TokenImpersonationLevel.Impersonate;
var resut=proxy.GetDataFromB().ToList();
};
} 
Web服务B:

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

调用
GetDataFromB()
时,我会得到一个
FileLoadException
找不到文件或程序集System.IdentityModel.Selectors

它发生在函数GetDataFromB内部或调用GetDataFromB时调用GetDataFromBit发生在函数GetDataFromB内部或调用GetDataFromB时