2011-03-12 56 views
37

Estoy desarrollando un servicio wcf simple para la prueba. Cuando pruebo este servicio con mi IIS 7.5 local, funciona correctamente. Pero cuando el anfitrión en IIS Web, recibo este error:Problema con el tipo de servicio en la directiva ServiceHost en el servicio wcf

The type 'WcfServiceLibrary1.Service1', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.

Y mi ServiceHost es:

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

Por favor, ayudarme a resolver este problema

+0

Creo que tengo un problema con el ensamblado –

+6

** ¿Qué archivos ** implementó en su servidor web IIS? Necesitas: un directorio virtual con el archivo * .svc dentro y un directorio 'bin' debajo con esto con DLL que contiene tu servicio WCF –

+0

sí, creo un directorio en mi espacio de host y copio todo mi proyecto (WcfServiceLibrary1) a mi directorio (para prueba). pero mi problema no ha sido resuelto !!! en mi proyecto existe un archivo .svc y el servicio trabajó con iis local correctamente –

Respuesta

20

intente utilizar el nombre de ensamblado de tipo cualificado .

Ésta es [Fully Qualified Type Name], [Assembly]

Dónde [Fully Qualified Type Name] es decir, 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, anidada tipos, etc.), pero es poco probable que lo sea en su caso.

Si la aplicación está utilizando las opciones por defecto de construcción, a continuación, voy a aventurar una respuesta que la directiva debe 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 quiere deshacerse de la nuevas líneas allí.

También, asegúrese de que su DLL en realidad se ha desplegado

+2

* .dll archivo (incluir mi servicio) se ha implementado en la carpeta Bin –

+0

por favor dame un ejemplo ServiceHost con nombre de tipo completo –

+0

@hamed ajorloo - respuesta actualizada –

4

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 archivo .svc para el servicio y mi cliente consumirá el servicio.

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

+1

Había agregado la mía como un directorio simple y necesitaba convertirla a una Aplicación. – tsilb

+0

el comentario anterior es lo que tuve que hacer: en mi servidor local, el directorio era una aplicación o directorio virtual, y cuando implementé en el www, acababa de descargar cosas allí. – pdschuller

8

Tuve el mismo problema solo al publicar 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.

+1

Parece una cosa ridícula para comprobar pero mi DLL también faltaba. –

+0

Tenía un ensamblado Microsoft.Identity que no estaba configurado para Copiar local, y solo produjo este error cuando se implementó en producción, pero no cuando se ejecuta localmente. Increíblemente molesto, pero cierto. –

+0

Faltaba una DLL a la que hacía referencia mi servicio de datos en la carpeta bin \ y eso generó el error. Se agregó el dll que falta, el servicio funcionó. –

0

Otra razón para este problema es a menudo 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 su archivo .svc y asegurarse de que la definición del servicio está definido correctamente

39

Debido a que no pude encontrar esto sugería en cualquiera de las preguntas que se veía a través de este, añadiendo mi caso aquí:

he tenido este problema cuando he cambiado manualmente el espacio de nombres en los archivos MyService.svc.cs , y no cambió el nombre del Servicio en el archivo correspondiente MyService.svc - resultó que necesitaba ser Service = "namespace.classname".

+4

Esto también me ayudó mientras preparaba mi primer servicio WCF 'Hello World'. Si cambia el espacio de nombres en el código que está detrás, no olvide hacer clic con el botón secundario en .svc, elegir 'mostrar marca' y, como dice Jac, editar el espacio de nombres allí también. – Ted

+0

Se estaba volviendo loco hasta que vi esto. gracias – Ric

+2

Esta corrección de espacio de nombres también se aplica si está inyectando una aplicación de servicio WCF externa en una aplicación web ASP.NET como a continuación. Asegúrese de que el espacio de nombres se especifica en las serviceActivations: ' ' – CrazyPyro

3

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 encontrando si apunté 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 funcionaría, y estaba arrojando este 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.

En última instancia, resolví el problema mediante la publicación 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.

+0

Hombre, desearía poder votar esto 1000 veces. Pasé aproximadamente 2 horas buscando una solución. – Anarion

1

Como no puedo votar por @jeromeyers responder 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 seguimiento de esto abajo, ya que comenzó con este error:

"nombre se inició con un carácter no válido de error archivo de recursos de procesamiento.': /// C:/...

<% @ServiceHost"

al intentar hacer clic derecho en el archivo .svc y hacer "Ver en el navegador".

4

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!

7

IIS no espera 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.

Al cambiar esto resolví este error hoy.

1

Aunque esto es ligeramente diferente a 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á construida 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!

1

tenía este problema al ejecutar 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 descubrir utilidad en la referencia del servicio.

0

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

0

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

0

Tuve este problema también, y lo que hizo la magia para mí fue reiniciar el IIS. Este es un error muy extraño.

0

enter image description hereenter image description here

primer alojamiento de aplicaciones de servicio WCF, en IIS tiempo? 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.

0

Por favor, mire https://msdn.microsoft.com/en-us/library/ms733766(v=vs.100).aspx

Que tiene que hacer 2 cosas para poder alojar el servicio en IIS, o incluso en IIS_EXPRESS itergrated de Visual Studio.

1) Actualizar el 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) Es necesario 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. Así que tendrá App_Code \ Service1.svc

Si explora el Servicio http://localhost:63309/Service1.svc, debería funcionar.

2

Compruebe si el espacio de nombres y la clase escritos en "Servicio" de "SeviceHost" es correcto. Debe ser Service="namespace.classname".

+0

Esto lo arregló para mí. El código de conversión que se ejecuta después de hacer clic en 'convertir a proyecto de aplicación web' dio (el anterior proyecto de sitio web) un nuevo espacio de nombre que NO estaba antepuesto al nombre de clase de servicio en el archivo svc. –

1

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 se pudo encontrar.

Claro que todos tenemos un gran proyecto con una gran cantidad de archivos 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 deseo Visual Studio notaría que las DLL dentro de la misma solución deberían tener como objetivo el mismo .Net runtime 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. .

+0

En mi caso la razón era similar. Se mezcló con falta de referencia en ServiceHost a InterfaceLib, que fue implementado por el servicio especificado en el archivo .svc – krzyski

Cuestiones relacionadas