start example application app wcf servicehost

example - Problema con el tipo de servicio en la directiva ServiceHost en el servicio wcf



wcf service application (18)

Aunque esto es ligeramente diferente de la pregunta (no web iis): llegué aquí a través de la búsqueda porque estaba obteniendo este error al intentar depurar mi servicio: si tiene múltiples servicios dentro de una única solución, este error ocurrirá si la solución en cuestión aún no está construido y, por lo tanto, la DLL no se creó cuando intenta acceder a ella. ¡Así que, para cualquiera, asegúrese de ejecutar localmente toda la solución si se ejecuta localmente!

Estoy desarrollando un servicio de wcf simple para la prueba. Cuando pruebo este servicio con mi IIS 7.5 local, funciona correctamente. Pero cuando lo albergo en web IIS, recibo este error:

No se pudo encontrar el tipo ''WcfServiceLibrary1.Service1'', proporcionado como el valor del atributo de servicio en la directiva ServiceHost, o proporcionado en el elemento de configuración system.serviceModel / serviceHostingEnvironment / serviceActivations.

Y mi ServiceHost es:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1" %>

Por favor, ayúdame a resolver este problema


Como no puedo votar por la respuesta de @jeromeyers en este momento, quiero agregar que esta es la solución que encontré para este problema.

Alguien había copiado y pegado un archivo svc y los archivos de código y contrato asociados a un nuevo proyecto, pero no habían actualizado los espacios de nombres y nombres de clase en todas partes. Muy frustrante rastrear esto como comenzó con este error:

"el nombre se inició con un carácter no válido. Error al procesar el archivo de recursos": /// C: / ...

<% @ServiceHost "

cuando intenta hacer clic derecho en el archivo .svc y hacer "Ver en el navegador".


Compruebe si el espacio de nombre y la clase escritos en "Servicio" de "SeviceHost" son correctos. Debe ser Service="namespace.classname" .


Extraño también, después de buscar e intentar otras sugerencias, todavía recibía el error diciendo: El tipo '', proporcionado como el valor del atributo de servicio en la directiva ServiceHost, o proporcionado en el elemento de configuración system.serviceModel / serviceHostingEnvironment / serviceActivations no podría ser encontrado.

Seguro que todos tenemos un gran proyecto con muchas DLL. Resultó que algunos de los componentes más antiguos en mi solución tenían como objetivo .Net 4.5, y los nuevos dll fueron compilados con 4.5.1. Cuando los 4.5 dlls hicieron referencia a los 4.5.1 dlls ... No estoy seguro de por qué era el pequeño conejillo de indias feliz de ser el primero en mi equipo en encontrar esto. Si bien la solución era obvia y fácil, todos los dlls apuntan al mismo tiempo de ejecución .Net.

Simplemente desearía que Visual Studio notara que las DLL dentro de la misma solución deberían apuntar al mismo tiempo de ejecución .Net y generar una advertencia / error al construir especialmente porque tenemos una solución y una referencia de proyecto y los tiempos de ejecución no coinciden ...


IIS espera esperar ver el archivo svc en el directorio virtual y los binarios dentro de una carpeta bin (como comentó marc_s).

Sin embargo, la configuración de compilación predeterminada para los proyectos de la Biblioteca WCF es construir dentro de una carpeta bin / Debug (o bin / Release). Puede cambiar la ruta de salida a ''bin /'' en la pestaña de compilación de las propiedades del proyecto.

Cambiar esto resolvió este error hoy para mí.


Intente utilizar el nombre de tipo calificado de ensamblaje.

Este es [Fully Qualified Type Name], [Assembly]

Donde [Fully Qualified Type Name] es, en los casos más comunes YourNamespace.YourType

Y [Assembly] es, en los casos más comunes YourAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Se vuelve más complicado que esto (tipos genéricos, tipos anidados, etc.), pero es poco probable que lo sea en su caso.

Si su aplicación está utilizando las opciones de compilación predeterminadas, supongo que la directiva debería ser algo como esto:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1, WcfServiceLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" %>

Aunque es probable que desee deshacerse de los nuevos allí.

Además, asegúrese de que su dll haya sido desplegado


La respuesta marcada como respuesta es muy difícil de entender. De hecho, aunque me llevó a resolver mi problema similar, no sé si es porque entiendo exactamente lo que el escritor quería decir.

Estaba descubriendo que si apuntaba una aplicación IIS en mi máquina de desarrollo al directorio del proyecto real en el que residen las carpetas web.config, MyService.svc y bin necesarias para la aplicación de servicio WCF, simplemente no funcionaba, y estaba lanzando esto error. Esto a pesar de cuadruplicar la comprobación de cada configuración y garantizar que las cosas fueran equivalentes a otras aplicaciones WCF simples y que funcionen.

Finalmente, resolví el problema publicando en un directorio diferente en lugar de depender de los archivos del proyecto y el directorio.

¿Quizás fue porque los archivos estaban abiertos en Visual Studio cuando intentaba ejecutar la aplicación WCF a través de IIS? No lo sé, pero Visual Studio proporcionó localhost: 59871 / ... funcionaba. No sé si esa instancia está usando los archivos del proyecto o una versión temporal publicada.


Me pasó lo mismo a mí y la solución fue crear un forder llamado "bin" y colocar el dll dentro de él. Luego, actualice el sitio web en IIS y eso es todo


Mire https://msdn.microsoft.com/en-us/library/ms733766(v=vs.100).aspx

Necesita hacer 2 cosas para poder alojar el servicio en IIS, o incluso en IIS_EXPRESS grabada de Visual Studio.

1) Actualice Web.Config para incluir ServiceActivations

cambio:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

a

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"> <serviceActivations> <add service="API.Service1" relativeAddress="Service1.svc"/> </serviceActivations> </serviceHostingEnvironment>

2) Necesita crear un directorio llamado App_Code en el directorio raíz. Ahora debe mover el Servicio (por ejemplo, Service1.svc) desde el directorio raíz al directorio App_Code. Por lo tanto, tendrá App_Code / Service1.svc

Si navega por el servicio http://localhost:63309/Service1.svc debería funcionar.


Otra razón para este problema es cuando un servicio wcf se mueve de un directorio a otro y el archivo svc no se ha actualizado ... la solución más fácil es verificar dos veces su archivo .svc y asegurarse de que la definición del servicio esté definida correctamente.


Porque no pude encontrar esto sugerido en ninguna de las preguntas que revisé para esto, agregando mi caso aquí:

Tuve este problema cuando cambié manualmente el espacio de nombres en el archivo MyService.svc.cs, y no cambié el nombre del servicio en el archivo correspondiente MyService.svc - resultó que tenía que ser Service = "namespace.classname".


Solo tuve el mismo problema cuando publiqué mi servicio pero funcionó localmente.

Resultó ser que el servicio hacía referencia a una DLL que no se estaba implementando. Es un caso súper especial porque era un dll del sistema (System.Web.Helpers) y, por lo tanto, el proyecto ni siquiera tenía una referencia y, por lo tanto, el "Copiar local" no se estableció en verdadero.


También tuve este problema, y ​​¿qué fue lo mágico para mí al reiniciar IIS? Este es un error muy extraño.


Tuve el mismo problema cuando subí mi servicio local de trabajo a una nueva ubicación en el host. Creé un nuevo directorio virtual y publiqué mi servicio a través de Visual Studio (FTP). Problema resuelto.


Tuve el mismo problema después de implementar un servicio en funcionamiento en una nueva ubicación (sitio nuevo) en IIS. En inetmgr en el árbol del Sitio web predeterminado, no había hecho clic con el botón derecho en el nuevo sitio y seleccioné Convertir a aplicación, ¡todo funcionaba ahora!


tenía este problema ejecutando un proyecto de prueba que estaba incrustado en mi solución.

Tuve que ver en el navegador, luego copiar ese enlace a una nueva referencia de servicio (eliminar el anterior) y luego pegarlo en lugar de usar el botón de utilidad de descubrimiento en la referencia del servicio.


Finalmente mi problema resuelto.

Eliminé el directorio del servicio en mi host y creé un nuevo directorio virtual en el espacio del host. Luego copié mi servicio en el nuevo directorio donde lo creé.

Ahora puedo buscar el servicio del archivo .svc y mi cliente consumirá el servicio.

¡No entiendo por qué ocurrió este problema! ¡Estoy un poco confundido!


¿La primera vez que aloja la aplicación de servicio WCF en IIS? Muchos han resuelto sus problemas de una manera u otra. Sin embargo, si su solución es correcta y su error es alojar su aplicación en IIS, asegúrese de que su ruta física en IIS cuando agregue su sitio web apunte al directorio "bin" de su solución como se ve a continuación en las capturas de pantalla.