ServiceHost
. A la hora de hospedar un servicioWCF
tenemos varias alternativas como IIS, servicios de windows, Windows Activation Services o directamente creando nuestra propia aplicación windows o consola y controlada cada instancia de servicio por código.A priori, hay veces que el escenario marca un poco el sistema que escogeremos. Por ejemplo si van a conectar clientes que no sean
WCF
es casi obligado hospedar los servicios en un IIS. En caso que sepamos con toda seguridad que los clientes serán WCF recomendaría crearnos una aplicación y controlar nosotros mismos la instancia de la claseServiceHost
de cada servicio. ¿Qué ventajas hay respecto a hospedar en un IIS?- Podemos configurar un binding NetTcpBinding que será más rápido que un binding por protocolo http.
- Es más sencillo controlar temas avanzados del Hosting respecto al resto de alternativas
- Requiere menos infraestructura
Levantar una instancia de servicio y hospedarla en una aplicación de tipo consola o windows es relativamente sencillo, hemos de crearnos un binding del tipo que consideremos, la dirección y poco más... La cosa se complica un poco si queremos publicar metadatos asociados al servicio, veamos como hacerlo:
//address - Uri
Uri Uri = new System.Uri("net.tcp://localhost/Services/");
ServiceHost svc = new ServiceHost(typeof(ServiceAreaTicSample), Uri);
#region netTcpBinding
NetTcpBinding bindingDefault = new NetTcpBinding(SecurityMode.None);
svc.AddServiceEndpoint("AreaTIC.WCFServer.IServiceAreaTicSample",bindingDefault, "AreaTicSample");
#endregion
#region Metadatos
ServiceMetadataBehavior smb = svc.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
smb = new ServiceMetadataBehavior();
svc.Description.Behaviors.Add(smb);
// Add MEX endpoint
svc.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,MetadataExchangeBindings.CreateMexTcpBinding(),"mex");
svc.Open();
#endregion
Con esto ya tendríamos un servicio con metadatos publicados lo cual implica que podríamos crear un cliente fácilmente a partir de la URL en la que hemos publicado los metadatos.
Los metadatos en este caso no serían equivalentes a un documento Wsdl, aunque sin cambiar demasiado código podríamos definir un binding por protocolo http y configurar

No hay comentarios:
Publicar un comentario en la entrada