Ist es möglich, mehrere Serviceverträge in einem WCF-Dienst zu hosten? Wenn das so ist, wie? Ich habe gegoogelt und einige Beiträge sagen, dass Sie es tun können (aber nicht wie) und andere haben gesagt, dass es einfach nicht möglich ist.Host mehrere Verträge in einem WCF-Dienst
Wenn ich den Server laufen, bekomme ich diesen Fehler:
The contract name 'ConsoleAppWcfCommon.IBarService' could not be found in the list of contracts implemented by the service 'ConsoleAppWcfServer.FooService'.
Das ist mein Server-Code ist:
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();
}
Und dies ist der Client-Code:
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());
}
Mein Ziel ist es zu lassen Der Client ruft Foo (oder Bar) an und sieht nur die verfügbaren Methoden. In meiner realen Anwendung habe ich etwa 10 Domäneneinheiten mit jeweils ungefähr vier Operationen. Ich versuche, keine Schnittstelle mit 40 Methoden zu haben. Und ich möchte dazu nicht 10 verschiedene WCF-Dienste hosten müssen.
Der einzige Weg, dies zu tun ist ** eine Service-Implementierungsklasse haben **, die implementiert ** ** beide Schnittstellen in Frage . Hast du das? Also müssten Sie 'öffentliche Klasse FooService haben: IFooService, IBarService {....}' –
http://Stackoverflow.com/a/334554/352101 – Bolu
@marc_s Ich habe das nicht, aber ich könnte als ich Besitze den gesamten Code. In meinem obigen Beispiel, sagst du, dass der Server-Code so funktionieren sollte wie er ist, wenn FooService beide Schnittstellen implementiert? –