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).