Un singolo servizio WCF offre più interfacce e, in caso affermativo, come lo esprimeresti in app.config
?Più interfacce da un singolo servizio WCF?
Intendo un servizio che offre diverse interfacce su un endpoint.
Un singolo servizio WCF offre più interfacce e, in caso affermativo, come lo esprimeresti in app.config
?Più interfacce da un singolo servizio WCF?
Intendo un servizio che offre diverse interfacce su un endpoint.
Per prima cosa è necessario chiarire cos'è un servizio. Si intende un singolo endpoint o più endpoint nello stesso host?
Supponendo che si intenda un singolo endpoint, quindi sì, ma con un po 'di lavoro. Un endpoint può implementare solo una singola interfaccia; così quello che dovete fare è combinare tutte le interfacce si desidera implementare in un'unica interfaccia
public interface IMyInterface : IInterface1, IInterface2
e quindi implementare tutti all'interno della vostra classe di implementazione. Ciò che non si può fare è avere interfacce multiple e più implementazioni magicamente fondersi in un singolo endpoint.
con WCF, è possibile:
Ecco come è possibile esporre la stessa interfaccia su due diversi endpoint in App.Config se è quello che stai chiedendo.
<service name="Service1">
<endpoint address="http://localhost:8001/service1.asmx" binding="basicHttpBinding" contract="IService" />
</service>
<service name="Service2">
<endpoint address="http://localhost:8002/service2.asmx" binding="basicHttpBinding" contract="IService" />
</service>
Se la classe di implementazione diventa troppo grande (come la mia), provare a implementare la super-interfaccia in una classe parziale. È possibile inserire un'implementazione dell'interfaccia in un unico file. È semplicemente una convenzione, ma potrebbe essere utile in seguito.
Quanto segue sembra più vicino alla meta originale e non comporta una grande interfaccia ...
più endpoint in un singolo ListenUri: http://msdn.microsoft.com/en-us/library/aa395210.aspx
Il campione linkato sopra spiega che si tratta di possibile avere più endpoint registrati allo stesso indirizzo fisico (listenUri), ognuno implementando un'interfaccia diversa (contratto), ad esempio:
<endpoint address="urn:Stuff"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.ICalculator"
listenUri="http://localhost/servicemodelsamples/service.svc" />
<endpoint address="urn:Stuff"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.IEcho"
listenUri="http://localhost/servicemodelsamples/service.svc" />
<endpoint address="urn:OtherEcho"
binding="wsHttpBinding"
contract="Microsoft.ServiceModel.Samples.IEcho"
listenUri="http://localhost/servicemodelsamples/service.svc" />
Ciò è possibile perché i messaggi in entrata vengono indirizzati all'endpoint appropriato in base a una combinazione di filtri indirizzo e contratto.
In realtà ho smesso di leggere quando ho visto una buona risposta che potrei usare. Vorrei aver visto la tua risposta in tempo. +1 perché questa è una risposta ancora migliore, anche se posso pensare ai casi adatti alla risposta accettata. –
Questa è una soluzione molto migliore per il problema che ho riscontrato. Mi ha permesso di avere due diversi tipi di serializzatori, necessari per la mia soluzione. –
Grazie, è esattamente quello che stavo chiedendo. –
Semplice, intelligente! Soluzione brillante +1 da me –
Ho due interfacce, devo fare due servizi? posso usare due interfacce ognuna con un endpoint nello stesso servizio? –