Recientemente creé un servicio WCF (dll) y un host de servicio (exe). Sé que mi servicio WCF funciona correctamente ya que puedo agregar con éxito el servicio a WcfTestClient.
Sin embargo, parece que me estoy encontrando con un problema cuando llego a utilizar mi WCF desde un host de servicio (exe). Puedo agregar una referencia a WCF (dll) a mi host de servicio (exe) y crear los componentes necesarios para el exe; como el instalador del servicio, el host del servicio y la aplicación.config, compile y finalmente instale el archivo ejecutable utilizando InstallUtil. Pero, cuando intenté iniciar el servicio en Microsoft Management Console, el servicio se detiene inmediatamente después de iniciarse.
Entonces comencé a investigar qué podría estar causando exactamente este problema y se me ocurrió este error en el Registro de la aplicación en el Visor de eventos.
Descripción:
No se puede iniciar el servicio. System.InvalidOperationException: el servicio 'Service' no tiene puntos finales de aplicación (no de infraestructura). Esto puede deberse a que no se encontró ningún archivo de configuración para su aplicación, a que no se pudo encontrar ningún elemento de servicio que coincida con el nombre del servicio en el archivo de configuración, o a que no se definieron puntos finales en el elemento de servicio.
Este error se genera realmente en el OnStart
; de mi exe, cuando realizo esta llamada ServiceHost.Open()
. He visto numerosas publicaciones en las que otras personas se han encontrado con este problema; sin embargo, la mayoría, si no todas, afirman que el nombre del servicio o el contrato; el espacio de nombres y el nombre de la clase no se especifican. Verifiqué ambas entradas en mi archivo de configuración; tanto en el exe como en el dll, y coinciden PERFECTAMENTE. Otras personas en la oficina me revisaron dos veces para asegurarme de que no me quedara ciego en un momento dado, pero por supuesto llegaron a la misma conclusión que yo de que todo parecía estar especificado correctamente. Realmente estoy perdido en cuanto a lo que está sucediendo en este momento. ¿Alguien podría ayudarme con este problema?
Otra cosa que surgió como una posible razón por la que esto puede estar sucediendo es que app.config nunca se lee; al menos no el que creo que debería ser leído. ¿Podría ser éste el problema? Si es así, ¿cómo puedo abordar este problema? Una vez más, se agradecería CUALQUIER ayuda.
fuente
Respuestas:
Acabo de tener este problema y lo resolví agregando el espacio de nombres al nombre del servicio, por ejemplo
convirtió
También lo he visto resuelto con un Web.config en lugar de un App.config.
fuente
El punto final también debe tener el espacio de nombres:
fuente
Una cosa en la que pensar es: ¿Tiene su WCF completamente desacoplado del WindowsService (WS)? Un WS es doloroso porque no tienes mucho control o visibilidad sobre ellos. Intento mitigar esto teniendo todas mis cosas que no son de WS en sus propias clases para que puedan probarse independientemente del servidor de WS. El uso de este enfoque podría ayudarlo a eliminar cualquier cosa que esté sucediendo con el tiempo de ejecución de WS en comparación con su servicio en particular.
John probablemente tenga razón en que se trata de un problema de archivo .config. WCF siempre buscará el contexto de ejecución .config . Por lo tanto, si aloja su WCF en diferentes contextos de ejecución (es decir, prueba con una aplicación de consola e implementa con un WS), debe asegurarse de que los datos de configuración de WCF se hayan movido al archivo .config adecuado. Pero el problema subyacente para mí es que no sabes cuál es el problema porque la sustancia WS se interpone en el camino. Si aún no lo ha refactorizado para que pueda ejecutar su servicio en cualquier contexto (es decir, prueba de unidad o consola), le sugiero que lo haga. Si hace girar su servicio en una prueba unitaria, probablemente fallará de la misma manera que está viendo con el WS, que es mucho más fácil de depurar en lugar de intentar hacerlo con la tubería de WS.
fuente
Simplemente copie el archivo App.config del proyecto de servicio a la aplicación de host de la consola y péguelo aquí y luego elimínelo del proyecto de servicio.
fuente
Obtuve una excepción más detallada cuando la agregué programáticamente
AddServiceEndpoint
:fuente
Preparar la configuración para WCF es difícil y, a veces, la definición de un tipo de servicio pasa desapercibida.
Escribí solo el espacio de nombres en la etiqueta de servicio, por lo que obtuve el mismo error.
No olvide que la etiqueta de servicio necesita un nombre de clase de servicio totalmente calificado.
Para las otras personas que son como yo.
fuente
TechResponse
) pero la mía está escribiendo solo el espacio de nombres (ServiceNameSpace
).Hoy me encontré con el mismo problema, publicando aquí mi error y la corrección para que pueda ayudar a alguien.
Mientras reestructuraba el código, en realidad había cambiado la clase de servicio y los nombres de IService y había cambiado ServiceHost para que apunte a este nuevo nombre de clase de servicio (como se muestra en el fragmento de código), pero en mi archivo App.Config de aplicaciones de host todavía estaba usando el nombre de clase de servicio antiguo . (consulte el campo de nombre de la sección de configuración en el siguiente fragmento)
Aquí está el fragmento de código,
y en el archivo App.config en la sección de servicios, me refería al antiguo nombre de la clase de servicio , cambiándolo a New ServiceClassName solucionado el problema para mí.
fuente
Yo tuve el mismo problema. Todo funciona en VS2010 pero cuando ejecuto el mismo proyecto en VS2008 obtengo la excepción mencionada.
Lo que hice en mi proyecto VS2008 para que funcionara fue agregar una llamada al
AddServiceEndpoint
miembro de mi objeto ServiceHost.Aquí está mi fragmento de código:
No modifiqué el archivo app.config. Pero supongo que el punto final del servicio también podría haberse agregado en el archivo .config.
fuente
Acabo de resolver este problema en mi servicio. Aquí está el error que estaba recibiendo:
Estos son los dos pasos que utilicé para solucionarlo:
Utilice el nombre de clase completo y correcto:
Habilite un punto final con mexHttpBinding y, lo más importante, use el contrato IMetadataExchange:
fuente
Este error ocurrirá si el archivo de configuración de la aplicación de hospedaje de su servicio WCF no tiene la configuración adecuada.
Recuerda este comentario de la configuración:
Si tiene un servicio WCF alojado en IIS, durante el tiempo de ejecución a través de VS.NET leerá el archivo app.config del proyecto de la biblioteca de servicios, pero leerá el archivo web.config del host una vez implementado. Si web.config no tiene la misma
<system.serviceModel>
configuración, recibirá este error. Asegúrese de copiar la configuración de app.config una vez que se haya perfeccionado.fuente
Me encontré con este problema y verifiqué todas las respuestas anteriores para asegurarme de que no me estaba perdiendo nada obvio. Bueno, tuve un problema semi-obvio. Mi nombre de clase en el código y el nombre de clase que usé en el archivo de configuración no coincidían.
Por ejemplo: si el nombre de la clase es CalculatorService y el archivo de configuración se refiere a Calculatorservice ... obtendrá este error.
fuente
Ejecuté Visual Studio en modo Administrador y funcionó para mí :) Además, asegúrese de que el archivo app.config que está usando para escribir la configuración WCF debe estar en el proyecto donde se usa la clase "ServiceHost", y no en el servicio WCF real proyecto.
fuente
Mi problema fue cuando cambié el nombre de mi clase Service1 predeterminada para el archivo .svc a un nombre más significativo, lo que provocó que la configuración de comportamiento y el punto final de web.config se correspondieran con la convención de nomenclatura anterior. Intente arreglar su web.config.
fuente
Una cosa crucial para recordar para aquellos que trabajan con una aplicación de consola para alojar el servicio WCF es que el archivo Web.config en el proyecto WCF se ignora por completo. Si su
system.serviceModel
configuración está ahí, entonces necesita mover esa sección de config al App.config de su proyecto de consola.Esto se suma a las respuestas relativas a garantizar que el espacio de nombres se especifique en los lugares correctos.
fuente
Como otra pista, eso de hecho solucionó este problema en mi caso.
Estoy migrando algunos servicios WCF desde una aplicación de consola (que configura en código algunos servicios WCF) a un WebRole de Azure para publicarlos en Azure. Cada vez que agrego un nuevo servicio, VS edita mi web.config y agrega esta línea:
Bueno, con todos los consejos y respuestas anteriores, no pude hacerlo funcionar hasta que eliminé todos los atributos en el elemento serviceHostingEnvironment. Como puede ver, no soy una estrella de rock de WCF, pero lo hice para trabajar con el primer servicio simplemente configurándolo como:
pero cuando agregué el segundo Servicio dejó de funcionar y me di cuenta de que esos atributos estaban ahí nuevamente.
Espero que te ahorre tiempo.
fuente
Tuve este error en un servicio de Windows cuando mi biblioteca de servicios WCF que creé no estaba conectada para el alojamiento, pero estaba conectada para la conexión. Me faltaba un punto final. (Quería tanto la conexión como el alojamiento en mi servicio de Windows para poder servir el servicio WCF a otras conexiones, así como que el proceso principal de mi servicio de Windows lo usara también para realizar varias tareas en un temporizador / programa).
La solución fue que hice clic con el botón derecho en mi archivo App.config y elegí Editar configuración de WCF. Luego, hice los pasos para Crear servicio para poder conectarme a mi Servicio WCF. Ahora tenía dos puntos finales en mi App.config, no solo uno. Un extremo era para la conexión a la biblioteca de servicios WCF y otro era para hospedarlo.
fuente