Czy możliwe jest hostowanie wielu umów serwisowych w jednej usłudze WCF? Jeśli tak to jak? Odwiedziłem go, a niektóre posty mówią, że możesz to zrobić (ale nie jak), a inni powiedzieli, że to niemożliwe.Obsługa wielu umów w jednej usłudze WCF
Kiedy uruchomić serwer, otrzymuję ten błąd:
The contract name 'ConsoleAppWcfCommon.IBarService' could not be found in the list of contracts implemented by the service 'ConsoleAppWcfServer.FooService'.
To jest mój kod serwera:
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();
}
I to jest kod klienta:
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());
}
Moim celem jest pozwolić klient nawiązuje połączenie z Foo (lub Bar) i widzi tylko metody dostępne dla każdego. W mojej prawdziwej aplikacji mam około 10 jednostek domenowych z około czterema operacjami na każdej z nich. Próbuję nie mieć jednego interfejsu z 40 metodami w nim. I nie chcę mieć do obsługi 10 różnych usług WCF, aby to zrobić.
Jedynym sposobem, aby to zrobić, to mieć ** klasy wykonania jednej usługi, który implementuje ** ** ** oba interfejsy w pytaniu . Masz to? Więc musisz mieć 'public class FooService: IFooService, IBarService {....}' –
http://stackoverflow.com/a/334554/352101 – Bolu
@ marc_s Nie mam tego, ale mogłem, tak jak ja posiadać cały kod. W powyższym przykładzie mówisz, że kod serwera powinien działać tak jak jest, jeśli FooService implementuje oba interfejsy? –