È possibile ospitare più contratti di assistenza in un servizio WCF? Se é cosi, come? Ho cercato su google e alcuni post dicono che puoi farlo (ma non come) e altri hanno detto che non è possibile.Host di più contratti in un servizio WCF
Quando eseguo il server, ottengo questo errore:
The contract name 'ConsoleAppWcfCommon.IBarService' could not be found in the list of contracts implemented by the service 'ConsoleAppWcfServer.FooService'.
Questo è il mio codice del server:
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();
}
e questo è il codice del client:
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());
}
Il mio obiettivo è di lasciare il cliente effettua una chiamata a Foo (o Bar) e vede solo i metodi disponibili per ciascuno. Nella mia vera applicazione, ho circa 10 entità di dominio con circa quattro operazioni su ciascuna. Sto cercando di non avere un'interfaccia con 40 metodi. E non voglio dover ospitare 10 diversi servizi WCF per farlo.
L'unico modo per farlo è quello di avere un unico servizio ** ** classe di implementazione che implementa ** entrambi ** interfacce in questione . Ce l'hai? Quindi dovresti avere 'FooService di classe pubblica: IFooService, IBarService {....}' –
http://stackoverflow.com/a/334554/352101 – Bolu
@marc_s Non ce l'ho, ma potrei farlo possedere tutto il codice. Nel mio esempio precedente, stai dicendo che il codice del server dovrebbe funzionare così com'è se FooService implementasse entrambe le interfacce? –