Ya un post anterior hablaba de cómo RIA Services se ha integrado dentro de WCF. En ese post anterior lo poníamos a prueba y veíamos cómo realmente es WCF, que no nos engañaban!
En este post toca ver en detalle algunas cosas sobre cómo se produce esta integración.
Una de las cosas que vimos es cómo al crear la aplicación, el DomainService crea un servicio WCF implícito, que el cliente es capaz de instanciar y usar para realizar las peticiones, siendo la estructura del servicio la siguiente:
http://[hostname]/[namespacename]-[classname].svc
Por ejemplo, http://localhost:XXX/BusinessAplication1-Web-OrganizationService.svc (BussinessApplication1-Web es el nombre del namespace,cambiando el punto por un guión )
WCF RIA Services implementa su propio ServiceHost ( DomainServiceHost ), el cual expone tres endpoints; WebHttpBinding (REST + JSON), BasicHttpBinding (SOAP+XML) y BinaryHttpBinding (SOAP+Binario), siendo éste último el que se usa por defecto.
- WebHttpBinding: http://[hostname]/[namespacename]-[classname].svc
- BasicHttpBinding:http://[hostname]/[namespacename]-[classname].svc/soap
- BinaryHttpBinding:http://[hostname]/[namespacename]-[classname].svc/binary
Si queremos cambiar el endpoint que se utiliza en la comunicación cliente-servidor, simplemente tenemos que indicar la dirección del endpoint que queremos usar al crear el DomainContext en el cliente:
OrganizationContext ctx = OrganizationContext(new Uri("BusinessApplication1-Web-OrganizationService.svc/soap", UriKind.Relative)));
<%@ ServiceHost Service="BusinessAplication1.Web.OrganizationService" Factory="System.Web.Ria.Services.DomainServiceHostFactory,
System.Web.Ria, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ ServiceHost Service="BusinessAplication1.Web.OrganizationService"
Factory="BusinessAplication1.Web.CustomDomainServiceHostFactory" %>
public class CustomDomainServiceHostFactory:DomainServiceHostFactory
{
protected override System.ServiceModel.ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
return new CustomDomainServiceHost(serviceType, baseAddresses);
}
}
public class CustomDomainServiceHost:DomainServiceHost
{
public CustomDomainServiceHost(Type domainServiceType, params Uri[] baseAddresses)
: base(domainServiceType, baseAddresses)
{
}
protected override void AddEndpoints()
{
foreach (Uri uri in this.BaseAddresses)
{
//AddSoapWithBinaryEndpoint(uri);
AddRestWithJsonEndpoint(uri);
//AddSoapWithXmlEndpoint(uri);
}
}
}
Hola Ibon
Realmente muy interesante tu articulo. Aprovecho para consultarte sobre la posibilidad de interactuar los WCF RIA Services con Entity Framework, te pregunto por el sentido de aprovechar las caracteriastiscas de trabajo desconectado que propone WCF. Si, tienes algun ejemplo o blog para estudiar mas sobre esto seria interesante, te dejo mi email: holguinsoft@msn.com