Возможно ли размещать несколько контрактов на обслуживание в одной службе WCF? Если да, то как? Я был googling, и некоторые сообщения говорят, что вы можете это сделать (но не так), а другие сказали, что это просто невозможно.
Когда я запускаю сервер, я получаю эту ошибку:
Название контракта "ConsoleAppWcfCommon.IBarService" не может быть найдено в списке контрактов, реализованных службой ConsoleAppWcfServer.FooService.
Это мой код сервера:
static void Main(string[] args)
{
string serviceAddress = "net.tcp://localhost:8088/FooBarService";
// I'm stuck here as I have to pick *one* service
ServiceHost selfServiceHost = new ServiceHost(typeof(FooService));
// I can add both endpoints here, but this is what gives me the error.
selfServiceHost.AddServiceEndpoint(typeof(IFooService), new NetTcpBinding(), serviceAddress);
selfServiceHost.AddServiceEndpoint(typeof(IBarService), new NetTcpBinding(), serviceAddress);
selfServiceHost.Open();
Console.ReadLine();
selfServiceHost.Close();
}
И это код клиента:
static void Main(string[] args)
{
NetTcpBinding netTcpBinding = new NetTcpBinding();
EndpointAddress endpointAddress = new EndpointAddress("net.tcp://localhost:8088/FooBarService");
// Call IFooService
var channelFactoryFoo = new ChannelFactory<IFooService>(netTcpBinding, endpointAddress);
IFooService channelFoo = channelFactoryFoo.CreateChannel();
Debug.WriteLine(channelFoo.FooMethod1());
// Call IBarService
var channelFactoryBar = new ChannelFactory<IBarService>(netTcpBinding, endpointAddress);
IBarService channelBar = channelFactoryBar.CreateChannel();
Debug.WriteLine(channelBar.BarMethod1());
}
Моя цель - позволить клиенту совершить звонок в Foo (или Bar) и видеть только доступные методы. В моем реальном приложении у меня около 10 доменных объектов с примерно четырьмя операциями. Я пытаюсь не иметь один интерфейс с 40 методами. И я не хочу размещать 10 различных служб WCF для этого.