Creé una aplicación web que contenía un contrato de servicio WCF y un control Silverlight que realiza llamadas a ese servicio WCF. En mis servidores de desarrollo y prueba funciona muy bien.
Cuando implemento en nuestro servidor en vivo y ejecuto la aplicación, obtengo una excepción de tipo System.ServiceModel.ServiceActivationException
que indica que el servicio no se puede activar debido a una excepción durante la compilación. La excepción es:
Esta colección ya contiene una dirección con el esquema http. Puede haber como máximo una dirección por esquema en esta colección.
Leí que esta excepción puede ser lanzada si el sitio web tiene más de un encabezado de host, lo cual es cierto en nuestro servidor en vivo. Aparentemente, los servicios WCF alojados en IIS solo pueden tener una dirección base. ¿Cómo puedo solucionar este problema?
Resumen,
Solución de código: aquí
Soluciones de configuración: aquí
Con la ayuda de Mike Chaliy , encontré algunas soluciones sobre cómo hacer esto a través del código. Debido a que este problema afectará a casi todos los proyectos que implementamos en un entorno en vivo, ofrecí una solución puramente de configuración. Finalmente encontré uno que detalla cómo hacerlo en .net 3.0 y .net 3.5.
Tomado del sitio, a continuación se muestra un ejemplo de cómo modificar la configuración web de sus aplicaciones:
Solución de DNS (sin probar): creo que si crea una nueva entrada de DNS específica para su aplicación web, agrega un nuevo sitio web y le da un encabezado de host único que coincide con la entrada de DNS, mitigaría este problema por completo, y no tiene que escribir código personalizado o agregar prefijos a su archivo web.config.
fuente
¿Viste esto? Http://kb.discountasp.net/KB/a799/error-accessing-wcf-service-this-collection-already.aspx
fuente
En mi caso, la causa raíz de este problema fue múltiples enlaces http definidos en el sitio web principal, es decir, InetMgr-> Sitios-> Mysite-> propiedades-> EditBindings. Eliminé un enlace http que no era necesario y el problema se resolvió.
fuente
Y en mi caso fue simple: utilicé el asistente 'Agregar servicio WCF' en Visual Studio, que creó automáticamente las secciones correspondientes en app.config. Luego seguí leyendo Cómo: alojar un servicio WCF en una aplicación administrada . El problema era: no necesitaba especificar la url para ejecutar el servicio web.
Reemplazar:
Con:
Y el error se ha ido.
Idea genérica: si proporciona la dirección base como parámetro y la especifica en la configuración, obtendrá este error. Probablemente, esa no sea la única forma de obtener el error, tú.
fuente
Tuve este problema y la causa fue bastante tonta. Estaba probando la demostración de Microsoft con respecto a ejecutar un ServiceHost desde w / en un ejecutable de línea de comandos. Seguí las instrucciones, incluido dónde dice agregar el Servicio (y la interfaz) apropiados. Pero obtuve el error anterior.
Resulta que cuando agregué la clase de servicio, VS agregó automáticamente la configuración a la app.config. Y la demostración también estaba tratando de agregar esa información. Como ya estaba en la configuración, eliminé la parte de demostración y funcionó.
fuente
Llegué por el mismo error en un viejo 2010 Exchange Server. Un servicio (servicio de replicación de buzones de Exchange) estaba dando el error anterior y el proceso de migración no pudo continuar. Buscando a través de Internet, llegué a este enlace que decía lo siguiente:
Exchange GRE no se abre cuando se instala por primera vez o si se realizan cambios en el servidor IIS. Se produce un error con el complemento y cuando intenta abrir la página del complemento, se muestra el siguiente contenido:
Causa : este error se produce porque el puerto http número 443 ya está en uso por otra aplicación y el servidor IIS no está configurado para manejar enlaces múltiples al mismo puerto.
Solución : configure el servidor IIS para manejar varios enlaces de puertos. Póngase en contacto con el proveedor (Microsoft) para configurarlo.
Dado que estos servicios se ofrecieron desde un servidor web IIS, la comprobación de los enlaces en el sitio raíz solucionó el problema. Alguien había estropeado los enlaces del sitio, definiendo reglas que se superponían y arruinó los servicios.
La fijación de los enlaces correctos resolvió el problema, en mi caso, y no tuve que configurar el Web.Config.
fuente