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.

6 comentarios:

Anónimo dijo...

Thanks!

It was very helpful!

Unknown dijo...

Buenas,

Como muchos otros me he encontrado con este mismo problema pero en mi caso haciendo lo que comentas me ha salido otro error.

El servicio 'RETA2Externals.Reta2ExternalsService' tiene cero extremos de aplicación.

La verdad es que soy novato con wcf-rest y estoy bastante desesperadito.

¿Me podrías echar una mano? La verdad es que no se que es lo que pasa. Si quieres puedo enviarte hasta el código basico hola mundo que me falla al subir al servidor

Muchas gracias por adelantado.

Guillermo Santamaría
guillersanta@gmail.com

Ricardo La Rosa dijo...

Hola Guillermo,

El error que comentas puede ser debido a que no tienes configurados los endpoints en tu servicio, verifica en tu archivo de configuracion que tengas la seccion , o prueba creando un nuevo servicio, te creara la seccion por defecto.

Si tienes esta seccion, verifica la parte del endpoint que tenga el nombre del servicio y el contrato segun tienes definido en tu servicio.

Saludos!

Unknown dijo...

Buenas RilaRos,

Efectivamente, me despiste y no lo había añadido y como hacia las pruebas en local es lo que tiene.

De todas maneras una vez metido el CustomHostFactory y con los endpoints caigo en el siguiente error:
"IIS hosted WCF Service error: no compatible TransportManager found for URI"
Y de ahi ya no se qué hacer.

El proyecto lo estoy montando con la plantilla de microsoft para WCF - REST en la que no se generan endpoints diferentes para cada uno de los contratos.

Gracias por la rápida respuesta

Anónimo dijo...

Te agradezco, me ayudo mucho la solución que propones. Saludos.

Unknown dijo...

Hola esta muchisismas gracias por tu ayuda amigo al igual que guillermo soy super novato en esto de los servicios wcf yo estube haciendo uno local pero ahora que trato de subirlo me manda el error que mencionas arriba pero al tratar de crear la clase no me aparece lo de ServiceHostFactory no se que libreria me falte y no se si podrias ayudarnos a nosotros que no sabemos nada como se debe de modificar el web.config para poder poner nuestra direccion de nuestro servidor compartido por que no se donde y en cuanto a los endpoint y contratos no se como se tiene que cambiar o si no se cambia para poder utilizar el servicio desde un cliente en silverlght agradesco mucho tu ayuda ya que para personas como yo que no sabemos nos iluminas un buen