C# WCF服务使用模拟调用另一个WCF服务
我面临一些模仿问题 用户(username=myLogin)必须调用服务器(server_A)上的WCF服务(WebService_A)。此服务将调用服务器(server_B)上的另一个WCF服务(WebService_B) 我希望WebService_B能够获取初始调用方的身份(“myLogin”) 代码如下所示: 客户: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
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时