web-dev-qa-db-fra.com

WCF, valeur d'attribut de service dans la directive ServiceHost introuvable

J'essaie d'héberger mon service avec IIS 6 mais je continue à avoir cette exception.

    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 

Je n'ai absolument aucune idée, sauf qu'il semble qu'il ne puisse pas trouver mes assemblées. Le code doit être correctement compilé avec les classes publiques.

Voici mon fichier .svc:

<%@ ServiceHost Language="C#" Debug="true" Service="QS.DialogManager.Communication.IISHost.RecipientService" CodeBehind="RecipientService.svc.cs" %>

J'ai essayé de créer un service très très simple qui ne contient rien pour savoir si cela fonctionnerait, mais la même erreur ancienne apparaît.

The type 'IISHost.Service1', provided as the Service attribute value in the ServiceHost directive could not be found. 
67
nandarya

Option un:

Ce message est souvent dû à un problème de configuration IIS 7. Si vous avez l'habitude de créer un répertoire virtuel pointant sur le dossier où réside votre service, cela ne fonctionne plus. Maintenant, vous devez utiliser l'option "Créer une application ..." à la place.

Autres options:

60

Le problème pourrait également se trouver dans un espace de noms différent dans le fichier svc comme dans le fichier svc.cs.

Dans svc, l'espace de nom de fichier doit être au format suivant.

Service="Namespace.SvcClassName"
68
Peter Stegnar

Je sais que c'est probablement la réponse "évidente", mais ça m'a fait trébucher un peu. Assurez-vous qu'il y a une dll pour le projet dans le dossier bin. Lorsque le service a été publié, le gars qui l'a publié a supprimé les dll parce qu'il pensait qu'elles étaient dans le GAC. Celui spécifiquement pour le projet (QS.DialogManager.Communication.IISHost.RecipientService.dll, dans ce cas) n'était pas là.

Même erreur pour une raison TRÈS différente.

30
baileyrt

Cette erreur se produit en raison d'une incompatibilité de nom de service dans le fichier .SVC. Vous avez probablement modifié le nom de la classe de service qui implémente l'interface. La solution consiste à ouvrir le fichier .SVC et à faire correspondre exactement l'attribut Service et l'attribut CodeBehind. Donc, votre fichier .SVC devrait être comme

<%@ 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"%>

Cet exemple concerne le fichier .svc utilisant le langage C #, avec le débogage activé, l'interface d'implémentation de la classe de service et cette classe se trouvant dans un dossier d'application portant le nom Service.cs et le produit est un espace de noms pour la classe de service.

Veuillez également apporter les modifications correspondantes dans le fichier de configuration du service.

 <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>
11
Chandra Malla

Vérifiez que vous référencez le type correct à partir de la directive ServiceHost dans le fichier .svc. Voici comment...

  1. Dans le projet VS contenant votre service Web, ouvrez le fichier .svc dans l'éditeur XML (cliquez avec le bouton droit de la souris sur le fichier, Ouvrir avec ..., choisissez Éditeur de texte XML, OK). 
  2. Notez la valeur de l'attribut "Service". 
  3. Assurez-vous qu'il correspond au nom de type qualifié complet de votre service. Cela inclut l'espace de nom + le nom du type. Par exemple, si l'espace-noms est "MyCompany.Department.Services" et que la classe est appelée "MyService", la valeur de l'attribut Service doit être "MyCompany.Department.Services.MyService".
9
charlie249

J'ai eu la même exception, cela est dû au type non correctement mentionné dans le fichier .svc

J'ai corrigé avec correctif ci-dessous.

si votre .svc.cs a la classe comme ceci

namespace Azh.Services.MyApp
{
    public class WcfApp : FI.IWcfAppService
{
...
}
}

pour cela, le fichier .svc devrait ressembler à ceci

<%@ ServiceHost Language="C#" Debug="true" Service="Azh.Services.MyApp.WcfApp" CodeBehind="WcfApp.svc.cs" %>
7
zahirhas

Vous devez configurer votre chemin de dossier bin sur service local bin.

4
Kishor

J'ai pratiquement résolu le même problème. Voici ma suggestion - L'erreur signifie que l'objet référencé dans l'attribut Service n'est pas trouvé. Pour que l'objet soit trouvé, l'application ou la bibliothèque doit générer une sortie dans le dossier bin.

Vous pouvez modifier la page de propriétés de l'application et spécifier le chemin de sortie vers 'bin'.

2
Dayakumar

Si vous avez renommé quoi que ce soit, vérifiez que (Propriétés /) AssemblyInfo.cs est correct, ainsi que l'en-tête du fichier de service.

ServiceName.svc

<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.WcfApp" CodeBehind="WcfApp.svc.cs" %>

Alignement sur votre espace de noms dans votre Service.svc.cs

2
lko

J'avais mes dll de service dans le dossier bin où le fichier svc résidait. Déplacer les dll dans le dossier bin bin a résolu le problème.

1
Mikayil Abdullayev

Cela peut paraître trivial, mais il convient de mentionner: Vous devez construire le service (dans Visual Studio) - puis un DLL sera créé dans le sous-dossier Bin.

Lorsque le service est "déployé" sur un serveur - ce dossier bin doit contenir le fichier DLL - sinon cette erreur sera renvoyée ...

1
Yuval A.

J'ai eu ce problème - mon type de service était dans le GAC. Cela fonctionnerait si j'ajoutais la dll contenant le type dans le dossier bin mais comme c'était dans le GAC, ce n'était PAS ce que je voulais. J'ai finalement ajouté ceci à la web.config pour le service

<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>

et cela a fonctionné sans avoir besoin de dll dans le dossier bin.

1
Jason9364

J'ai fait face à cette erreur aujourd'hui, la raison était; L'utilisateur IIS n'est pas autorisé à accéder au dossier de l'application. J'ai donné les autorisations de lecture au dossier racine de l'application.

1
Fatih Çelik

J'ai également rencontré ce problème en essayant l'exemple Microsoft.ServiceModel.Samples.Calculator WCF. J'utilise IIS 5.1. Je l'ai résolu en veillant à ce que le site Web généré automatiquement (servicemodelsamples) ne soit pas une application. Cliquez-droit sur le dossier, cliquez sur "Propriétés" et cliquez sur le bouton "Créer".

1
amgray789

Dans mon cas, cliquez avec le bouton droit sur le répertoire virtuel et sélectionnez "Convertir en application".

1
Atul K.

Problème introuvable: "1) Si vous travaillez dans Silverlight, vous devez utiliser le service Silverlight WCF-Enabled, et non le service non fourni. Service Silverlight WCF; cela mettra à jour Web.Config pour les liaisons et permettra au type d'être visible; (2) Faites correspondre le nom de la classe du nouveau service avec le nom du service. Le but ici est de créer un fichier WSDL ... afin que vous sachiez que la fonctionnalité du service est exposée à votre client Silverlight et au Web; il est utile que le service corresponde à la classe. Si vous obtenez les noms gommés, vous devrez éditer Web.Config à trois endroits (serviceBehaviors, services et liaisons).

Il y a eu tellement de tentatives sincères pour aider les gens avec ce problème qui ne m'ont pas aidé qu'il convient de souligner que cette description est pour une solution Silverlight et qu'elle peut ne pas s'appliquer aux personnes qui n'utilisent pas Silverlight 3 dans une configuration client/Web. .

J'espère que ça aide.

1
kgoldfisher

J'ai eu le même problème mais aucune idée de ce qui l'a causé. Je l'ai résolu en passant de Debug à Release et Run à l'aide de Debug/Start New Instance. Après cela, il a été lancé dans les versions Release et Debug. C'était magique ...

1
Clayton
  1. Assurez-vous que le fichier de balisage (svc) a l'attribut de service avec namespace.classname et que codebehind sera classname.svc.cs.

  2. Reconstruire la solution 

  3. Redémarrez les pools d'applications à partir du local IIS une fois.

0
Nitin

J'ai eu cette erreur en essayant d'ajouter la référence de service pour le premier WCF activé pour Silverlight dans la même solution. Je viens de construire le projet .Web et ça a commencé à fonctionner ..

0
AnoojNair

Construire la solution avant d'ajouter la référence de service a résolu mon problème.

0
Ratan

J'ai eu le même problème, trouvé ce fil, essayé tout sauf nogo.

Ensuite, j'ai passé 4 heures de temps perdu.

Ensuite, j'ai constaté que les paramètres de compilation étaient passés de 64 bits à x86. Quand je l'ai changé à 64bits cela a fonctionné. Je ne sais pas exactement pourquoi, mais il se pourrait que le pool d'applications IIS n'ait pas été configuré pour autoriser les applications 32 bits.

0
edelwater

Ajoutez une référence de service dans votre service ou copiez une dll.

0
JDP