다음 상황을 고려하십시오.클래스가 여러 인터페이스를 구현하는 WCF 서비스
예를 들어, IService1
, IService2
, IService3
... 모든 인터페이스는 단일 클래스 (MainService
)로 구현됩니다.
NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, reliableSessionEnabled: true);
string address1 = "net.tcp://localhost:9000/ep1";
// create other addresses with ep2, ep3 and so on...
ServiceHost serviceHost = new ServiceHost(typeof(ServiceLibrary.MainService));
serviceHost.AddServiceEndpoint(typeof(IService1), binding, address1);
serviceHost.AddServiceEndpoint(typeof(IService2), binding, address2);
serviceHost.AddServiceEndpoint(typeof(IService3), binding, address3);
// and so on...
serviceHost.Open();
Console.WriteLine("Running...");
Console.ReadLine();
이 시점에서이 서비스 호스트 인스턴스에 대해 여러 끝점이 있습니다. 클라이언트 인스턴스를 만들려면 다음을 수행하십시오. -
NetTcpBinding binding = new NetTcpBinding(SecurityMode.None, reliableSessionEnabled: true);
string address = "net.tcp://...:9000/ep1";
ChannelFactory<ServiceLibrary.IService1> channelFactory = new ChannelFactory<IService1>(binding, address);
IService1 channel1 = channelFactory.CreateChannel();
// create other channel factories and other channels and now we have channel1, channel2, channel3
이 채널은 기본적으로 기능을 호출 할 수있는 프록시입니다. 그러나 이러한 프록시는 인터페이스마다 다릅니다. channel1
은 IService1
에 정의 된 메소드를 제외하고는 다른 메소드를 호출하지 않습니다.
내가 필요한 것은 IService1
, IService2
, IService3
등의 인터페이스에 정의 된 모든 메소드를 호출 할 수있는 슈퍼 프록시입니다.
아이디어가 있으십니까?
EDIT : 단일 인터페이스가 다른 모든 인터페이스를 상속받는 것은 불가능합니다. 서비스가 이미 개발되었다고 가정하고 내가 할 수있는 것은 서비스 호스트와 채널을 만드는 것입니다.
사실 내 생각에 그런 생각이 들었지 만 불행히도 그럴 수는 없습니다. – p0lAris
그 이유는 할 수 없습니까? – Tim
일부 서비스를 구현하는 이미 패키지 된 일부 DLL을 고려하십시오. 하지만 리플렉션을 동적으로 사용하여 이러한 모든 것을 상속받는 인터페이스를 만들면 가능합니다. – p0lAris