10 jun 2009

// // 6 comentarios

WCF: Esta colección ya contiene una dirección con el esquema http. Sólo puede haber una dirección por esquema en esta colección

“This collection already contains an address with scheme http. There can be at most one address per scheme in this collection.“

Pues recientemente me he topado con este mensaje de error, me ha salido al momento de hacer deployment de un servicio WCF, en modo local no tenia problemas, indagando un poco encontré que se trata de como IIS aloja los servicios, para lo cual permite una sola dirección por esquema (HTTP), por lo cual en servidores de hosting compartidos nos da este problema, en mi caso lo solucione creando una clase Factory que herede de ServiceHostFactory y sobrescriba el método que devuelve el  ServiceHost con solo una dirección:

public class CustomHostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
Uri webServiceAddress
= new Uri("http://dominio.com/Service.svc");
ServiceHost webServiceHost
= new ServiceHost(serviceType, webServiceAddress);

return webServiceHost;
}
}


Ahora solo nos hace falta indicarle al servicio que debe usar esta clase como Factory



<%@ ServiceHost Language="C#" Debug="true" Service="Services.MyService" Factory="Services.CustomHostFactory" %>


Con esto ya no tendremos este error y nuestro servicio trabajará correctamente.



Adicionalmente a esto pueden otras opciones de como solucionar este problema como en los siguientes enlaces:



WCF: This collection already contains an address with scheme http



How can WCF support multiple IIS Binding specified per site ?



Espero les pueda evitar unos cuantos dolores de cabeza.

Leer post completo