对于客户,我需要实现以下方案:
我正在寻找的是一种在一个地方实现模仿的方法,而不是分别在每个服务方法中实现。
如何在服务中实现此功能?
感谢您的帮助,
马库斯
答案 0 :(得分:1)
也许这个例子可以帮助你: 取自here
public class HelloService : IHelloService
{
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string Hello(string message)
{
WindowsIdentity callerWindowsIdentity = ServiceSecurityContext.Current.WindowsIdentity;
if (callerWindowsIdentity == null)
{
throw new InvalidOperationException
("The caller cannot be mapped to a Windows identity.");
}
using (callerWindowsIdentity.Impersonate())
{
EndpointAddress backendServiceAddress = new EndpointAddress("http://localhost:8000/ChannelApp");
// Any binding that performs Windows authentication of the client can be used.
ChannelFactory<IHelloService> channelFactory = new ChannelFactory<IHelloService>(new NetTcpBinding(), backendServiceAddress);
IHelloService channel = channelFactory.CreateChannel();
return channel.Hello(message);
}
}
}
答案 1 :(得分:0)
实际上这个链接给出了答案: ServiceAuthorizationBehavior.ImpersonateCallerForAllOperations
一个片段:
有关详细信息,包括在将Allowed与ServiceAuthorizationBehavior.ImpersonateCallerForAllOperations属性一起使用时如何执行模拟,请参阅使用WCF进行委派和模拟以及如何:在服务上模拟客户端。
以下是文字链接。