Uno degli aspetti più interessanti del self-hosting è la possibilità di poter gestire più endpoints contemporaneamente. Infatti, potremmo definire due scenari di comunicazione (trasporto):
- Accesso al servizio da Internet
- Access al servizio da un processo locale
Con i web services non vi erano molte scelte (purtroppo), tutto veniva veicolato attraverso il protocollo HTTP e le regole con esso definite (es. WS-*). In Indigo la cosa è molto più semplice, è possibile definire due endpoints specifici ed ottimizzati per ogni esigenza. Basta aggiungerli nella lista dei listeners:
BasicProfileBinding httpBinding = new BasicProfileBinding();
Uri httpUri = new Uri("http://localhost:7070/ContactService");
NetProfileNamedPipeBinding pipeBinding = new NetProfileNamedPipeBinding();
Uri pipeUri = new Uri("net.pipe://localhost/ContactService");
_host = new ServiceHost<ContactService>();
_host.AddEndpoint(typeof(IContactService), httpBinding, httpUri);
_host.AddEndpoint(typeof(IContactService), pipeBinding, pipeUri);
A questo punto il nostro servizio è accessibile sia attraverso HTTP che Named Pipe (molto più efficiente).