c# - publicacion - WCF, valor de atributo de servicio en la directiva ServiceHost no se pudo encontrar
habilitar publicacion de metadatos (21)
Agregue referencia de servicio en su servicio o copie dll.
Estoy tratando de alojar mi servicio con IIS 6, pero sigo recibiendo esta excepción.
Server Error in ''/WebServices'' Application.
--------------------------------------------------------------------------------
The type ''QS.DialogManager.Communication.IISHost.RecipientService'', provided as the Service attribute value in the ServiceHost directive could not be found.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.InvalidOperationException: The type ''QS.DialogManager.Communication.IISHost.RecipientService'', provided as the Service attribute value in the ServiceHost directive could not be found.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[InvalidOperationException: The type ''QS.DialogManager.Communication.IISHost.RecipientService'', provided as the Service attribute value in the ServiceHost directive could not be found.]
System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +6714599
System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +604
System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +46
System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +654
[ServiceActivationException: The service ''/WebServices/dm/RecipientService.svc'' cannot be activated due to an exception during compilation. The exception message is: The type ''QS.DialogManager.Communication.IISHost.RecipientService'', provided as the Service attribute value in the ServiceHost directive could not be found..]
System.ServiceModel.AsyncResult.End(IAsyncResult result) +15626880
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +15546921
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +265
System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +227
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082
No tengo absolutamente ninguna pista excepto que parece que no puede encontrar mis ensamblajes. El código debe compilarse correctamente con clases públicas.
Aquí está mi archivo .svc:
<%@ ServiceHost Language="C#" Debug="true" Service="QS.DialogManager.Communication.IISHost.RecipientService" CodeBehind="RecipientService.svc.cs" %>
Intenté crear un servicio muy simple que no contenga nada para ver si esto funcionaría, pero sigue apareciendo el mismo error anterior.
The type ''IISHost.Service1'', provided as the Service attribute value in the ServiceHost directive could not be found.
Construir la solución antes de agregar la referencia de servicio resolvió mi problema.
Debes configurar la ruta de tu carpeta bin para que funcione en el contenedor local.
El problema también podría ser un espacio de nombres diferente en el archivo svc, ya que está en el archivo svc.cs.
En el espacio de nombres del archivo svc debe estar en el siguiente formato.
Service="Namespace.SvcClassName"
En mi caso, haga clic derecho en el directorio virtual y seleccione "Convertir a la aplicación" funcionó!
Este error ocurre debido a la falta de coincidencia del nombre del servicio en el archivo .SVC. Probablemente haya cambiado el nombre de la clase de servicio que está implementando la interfaz. La solución consiste en abrir el archivo .SVC y coincidir exactamente con el atributo del servicio y el atributo CodeBehind. Entonces su archivo .SVC debería ser como
<%@ ServiceHost Language="Language you are using" Debug="bool value to enable debugging" Service="Service class name that is implementing your Service interface" Codebehind="~/Appcode/Class implementing interface.cs"%>. for eg.
<%@ ServiceHost Language="C#" Debug="true" Service="Product.Service" CodeBehind=~/AppCode/Product.Service.cs"%>
Este ejemplo es para el archivo .svc que utiliza el lenguaje C #, con la depuración habilitada, la interfaz de implementación de la clase de servicio y esta clase está dentro de la carpeta de aplicaciones con el nombre Service.cs y Product es el espacio de nombres para la clase de servicio.
Además, realice los cambios respectivos en el archivo de configuración del servicio.
<system.serviceModel>
<services>
<service name="Product.Service" behaviorConfiguration="ServiceBehavior">
<endpoint address="" binding="wsHttpBinding" contract="Product.Iservice">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<behavior name="ServiceBehavior">
<serviceMetaData httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</behaviors>
</system.serviceModel>
Esto puede sonar trivial, pero vale la pena mencionarlo: debe crear el servicio (en Visual Studio); luego se creará una DLL en la subcarpeta bin.
Cuando el servicio se "implementa" en un servidor, esa carpeta bin necesita tener ese archivo DLL en él; de lo contrario, se generará este error ...
Hoy me enfrenté a este error, la razón fue; El usuario de IIS no tiene permiso para llegar a la carpeta de la aplicación. Le di los permisos de lectura a la carpeta raíz de la aplicación.
No se pueden encontrar dos claves para esto con respecto a ciertos sabores del ''Valor de atributo del servicio en la directiva ServiceHost''-problema: (1) Si trabaja en Silverlight, debe usar el servicio habilitado para WCF de Silverlight, no el servicio no habilitado para WCF. Silverlight WCF Service; esto actualizará Web.Config para los enlaces y permitirá que el tipo sea visible; (2) Haga coincidir el nombre de la clase en el nuevo servicio con el nombre del Servicio; el objetivo aquí es crear un wsdl ... para que sepa que la funcionalidad del servicio está expuesta a su cliente de Silverlight y a la Web; ayuda a que el servicio coincida con la clase. Si obtiene los nombres engomados, deberá editar Web.Config en 3 lugares (serviceBehaviors, services and bindings).
Hubo tantos intentos sinceros de ayudar a las personas con este problema que no me sirvieron para nada, por lo que debe destacarse que este artículo es para una solución de Silverlight y puede que no se aplique para alguien que no use Silverlight 3 en una configuración cliente / web. .
Espero eso ayude.
Obtuve este error al intentar agregar la referencia de servicio para el primer WCF habilitado para Silverlight en la misma solución. Acabo de construir el proyecto .Web y comenzó a funcionar ...
Prácticamente resolví el mismo problema. Aquí está mi sugerencia: el error significa que el objeto al que se hace referencia en el atributo de servicio no se encuentra. Para el objeto que se va a encontrar, la aplicación o la biblioteca debe generar salida a la carpeta bin.
Puede editar la página de propiedades de la aplicación y especificar la ruta de salida a ''bin''.
Sé que esta es probablemente la respuesta "obvia", pero me hizo tropezar un poco. Asegúrate de que haya un dll para el proyecto en la carpeta bin. Cuando se publicó el servicio, el chico que lo publicó eliminó los dlls porque pensó que estaban en el GAC. El específico para el proyecto (QS.DialogManager.Communication.IISHost.RecipientService.dll, en este caso) no estaba allí.
El mismo error por una razón MUY diferente.
Si ha cambiado el nombre, verifique que (Properties /) AssemblyInfo.cs
sea correcto, así como también el encabezado en el archivo de servicio.
ServiceName.svc
<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.WcfApp" CodeBehind="WcfApp.svc.cs" %>
Alineación con su espacio de nombres en su Service.svc.cs
También encontré este problema al probar la muestra WCF de Microsoft.ServiceModel.Samples.Calculator. Estoy usando IIS 5.1. Lo resolví asegurándome de que el sitio web que se generó automáticamente (servicemodelsamples) no era una aplicación. Haga clic derecho en la carpeta, haga clic en "Propiedades" y haga clic en el botón "Crear".
Tenía mi dll de servicio en la carpeta bin donde residía el archivo svc. Mover el dll a la carpeta de bin raíz resolvió el problema.
Tuve el mismo problema, encontré este hilo, intenté todo, pero no.
Luego gasto otras 4 horas de tiempo perdido.
Luego descubrí que la configuración de compilación había cambiado de 64 bits a x86. Cuando lo cambié a 64bits, funcionó. No sé exactamente por qué, pero podría ser que el grupo de aplicaciones de IIS no estuviera configurado para permitir aplicaciones de 32 bits.
Tuve el mismo problema, pero no tengo idea de qué lo causó. Lo resolví cambiando de Debug a Release y Ejecuto usando Debug / Start New Instance. Después de eso, se ejecutó en Release y Debug. Fue magico...
Tuve este problema: mi tipo de servicio estaba en el GAC. Funcionaría si añadiera el DLL que contiene el tipo a la carpeta bin, pero como estaba en el GAC, NO era lo que quería. Finalmente agregué esto a web.config para el servicio
<system.web>
<customErrors mode="RemoteOnly" />
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="[name in GAC], Version=[version in GAC], Culture=neutral, PublicKeyToken=[ac token]" />
</assemblies>
</compilation>
</system.web>
y funcionó sin necesidad de dlls en la carpeta bin.
Tuve la misma excepción, esto se debe al tipo no mencionado correctamente en el archivo .svc
Corregí con la solución a continuación.
si tu .svc.cs tiene una clase como esta
namespace Azh.Services.MyApp
{
public class WcfApp : FI.IWcfAppService
{
...
}
}
para esto el archivo .svc debería verse así
<%@ ServiceHost Language="C#" Debug="true" Service="Azh.Services.MyApp.WcfApp" CodeBehind="WcfApp.svc.cs" %>
Verifique que está haciendo referencia al tipo correcto de la directiva ServiceHost en el archivo .svc. Así es cómo...
- En el proyecto VS que contiene su servicio web, abra el archivo .svc en el editor XML (haga clic con el botón derecho en el archivo, abra con ..., elija XML (Text) Editor, OK).
- Tenga en cuenta el valor del atributo "Servicio".
- Asegúrese de que coincida con el nombre de tipo completo de su servicio. Esto incluye el espacio de nombres + nombre de tipo. Por ejemplo, si el espacio de nombre es "MyCompany.Department.Services" y la clase se llama "MyService", el valor del atributo del servicio debe ser "MyCompany.Department.Services.MyService".
Opción uno :
Este mensaje a menudo se debe a un problema de configuración de IIS 7. Si está acostumbrado a crear un directorio virtual que apunta a la carpeta donde reside su servicio, eso ya no funciona. Ahora, necesita usar la opción "Crear aplicación ..." en su lugar.
Otras opciones :