Una sola aplicación es suficiente para todos los servicios. Por supuesto
podrías también separar servicios que no tengan relación entre sí en diferentes
aplicaciones. Esto queda a criterio tuyo. Si todos los servicios son hospedados
por una misma aplicación entonces es necesario crear un ServiceHost separado
para cada uno de ellos. Por ejemplo,
...
hostMateriales = new ServiceHost(typeof(MaterialesService));
hostMateriales.Open();
hostOrdenes = new ServiceHost(typeof(OrdenesDeCompraService));
hostOrdenes.Open();
...
y en el archivo de configuración:
...
<system.serviceModel>
<services>
<service name="MaterialesService">
<endpoint name="Materiales"
address="http://localhost:8080/servicios/materiales"
binding="basicHttpBinding"
contract="IMaterialesService" />
</service>
<service name="OrdenesDeCompraService">
<endpoint name="Ordenes"
address="http://localhost:8080/servicios/ordenes"
binding="basicHttpBinding"
contract="IOrdenesDeCompraService" />
</service>
</services>
</system.serviceModel>
...
Saludos,
Fernando Tubio
----- Original Message -----
From: Javier Alessandrello
To: [email protected]
Sent: Thursday, June 14, 2007 3:41 PM
Subject: [puntonet] WCF-¿Cuantos Hosts necesito?
Estoy empezando a ver WCF y me surge una duda. Estoy haciendo una aplicacion
en donde cree varios Service Contracts para mantener cierto grado de cohesión
en el diseño y no tener un Service Contract con infinitos Métodos. Asi es que
por ejemplo, tengo un IRequisicionesService, un IMaterialesService, un
IOrdenesDeCompraService, etc. cada uno con su respectiva implementación. Estuve
viendo el codigo para hostar en una aplicación de consola (que es practicamente
el mismo en todos los ejemplos que pude ver por ahi) y aca es donde surge mi
duda...
Se que hosteando en IIS puedo hostear todos los Servicios en una sola
aplicación por que ahi creo un .svc por ServiceContract. Pero para hostear en
una aplicación de Consola o en un Servicio Windows ¿Necesito crear un
aplicación Host para cada uno de los ServiceContracts o se puede crear una sola
aplicación que hostee todos Servicios?
El codigo del que hablo más arriba es este...
using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
namespace WCFServiceConsoleHost {
class Program {
static void Main(string[] args) {
Type serviceType = typeof(DerivativesCalculatorServiceType);
string httpBaseAdress = ConfigurationManager.AppSettings["HTTPBaseAddress"];
string tcpBaseAdress = ConfigurationManager.AppSettings["TPCBaseAddress"];
Uri httpBaseAdressUri = new Uri(httpBaseAdress);
Uri tcpBaseAdressUri = new Uri(tcpBaseAdress);
Uri[] baseAdresses = new Uri[] { httpBaseAdressUri, tcpBaseAdressUri };
using (ServiceHost host = new ServiceHost(serviceType, baseAdresses)) {
host.Open();
Console.WriteLine("Servicio Corriendo");
Console.ReadLine();
host.Close();
}
}
}
}