web-dev-qa-db-fra.com

Problème avec le type de service dans la directive ServiceHost dans le service wcf

Je développe un service wcf simple pour le test. Lorsque je teste ce service avec mon IIS 7.5 local, il fonctionne correctement. Mais lorsque je l’héberge dans Web IIS, je reçois cette erreur: 

Le type 'WcfServiceLibrary1.Service1', fourni en tant qu'attribut Service valeur dans la directive ServiceHost, ou fourni dans l'élément de configuration system.serviceModel/serviceHostingEnvironment/serviceActivations Ne peut être trouvé.

Et mon ServiceHost est: 

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

S'il vous plaît aidez-moi à résoudre ce problème

37
hamed aj

Parce que je ne trouvais cela suggéré dans aucune des questions que j’avais parcourues, j’ai ajouté mon cas ici: 

J'ai eu ce problème lorsque j'ai modifié manuellement l'espace de noms dans le fichier MyService.svc.cs et que je n'ai pas changé le nom du service dans le fichier correspondant MyService.svc.

39
Jac

Essayez d'utiliser le nom de type qualifié d'assembly.

Ceci est [Fully Qualified Type Name], [Assembly]

[Fully Qualified Type Name] est, dans les cas les plus courants YourNamespace.YourType

Et [Assembly] est, dans les cas les plus courants, YourAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Cela devient plus compliqué que cela (types génériques, types imbriqués, etc.) - mais cela ne sera probablement pas le cas dans votre cas.

Si votre application utilise les options de génération par défaut, je vais donc deviner que la directive devrait ressembler à ceci:

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

Bien que vous souhaitiez probablement vous débarrasser des nouvelles lignes.

Assurez-vous également que votre DLL a bien été déployée.

20
Andras Zoltan

J'ai eu le même problème uniquement lors de la publication de mon service, mais cela fonctionnait localement.

Il s'est avéré que le service faisait référence à une DLL non déployée. C'est un cas super spécial parce que c'était une dll système (System.Web.Helpers) et que, par conséquent, le projet n'y avait même pas de référence et que "Copy Local" n'était pas défini sur true.

8
mike kozelsky

Par défaut, IIS s'attend à voir le fichier svc dans le répertoire virtuel, ainsi que les fichiers binaires dans un dossier bin (commenté par marc_s).

Cependant, la configuration de construction par défaut pour les projets de bibliothèque WCF consiste à créer dans un dossier bin/Debug (ou bin/Release). Vous pouvez modifier le chemin de sortie en "bin /" dans l'onglet Construction des propriétés du projet.

Changer cela a résolu cette erreur pour moi aujourd'hui.

8
Nij

Enfin mon problème résolu.  

J'ai supprimé le répertoire de service de mon hôte et créé un nouveau répertoire virtuel dans l'espace de l'hôte. Ensuite, j'ai copié mon service dans un nouveau répertoire où je l'ai créé.

Maintenant, je peux parcourir le fichier .svc pour le service et mon client utilisera le service.

Je ne comprends pas pourquoi ce problème est survenu! Je suis un peu confus!

4
hamed aj

J'ai eu le même problème après avoir déployé un service actif vers un nouvel emplacement (nouveau site) dans IIS. Dans inetmgr sous l’arborescence du site Web par défaut, je n’avais pas cliqué avec le bouton droit sur le nouveau site et sélectionné Convertir en application - tout fonctionne maintenant!

4
Tom Tom

La réponse marquée comme réponse est très difficile à comprendre. En fait, bien que cela m’ait amené à résoudre un problème similaire, je ne sais pas si c’est parce que je comprends exactement ce que voulait dire l’auteur.

Je trouvais que si je pointais une application IIS sur ma machine de développement vers le répertoire du projet dans lequel se trouvent les dossiers web.config, MyService.svc et bin nécessaires à l'application de service WCF, cela ne fonctionnerait tout simplement pas, et jetait cette erreur. Ceci en dépit de la quadruple vérification de chaque paramètre et de l’assurance que les choses étaient équivalentes à d’autres applications WCF simples et fonctionnelles.

En fin de compte, j'ai résolu le problème en publiant dans un répertoire différent plutôt qu'en fonction des fichiers du projet et du répertoire eux-mêmes.

Peut-être était-ce dû au fait que les fichiers étaient ouverts dans Visual Studio alors que j'essayais d'exécuter l'application WCF via IIS? Je ne sais pas, mais le studio local fourni par Visual Studio: 59871/... fonctionnait. Je ne sais pas si cette instance utilise les fichiers de projet ou une version publiée temporaire.

3
jeromeyers

Vérifiez si l'espace de noms et la classe écrits dans "Service" de "SeviceHost" sont corrects. Ce doit être Service="namespace.classname".

2
user6676476

eu ce problème en exécutant un projet de test qui a été intégré dans ma solution.

Je devais afficher dans le navigateur, puis copier ce lien dans une nouvelle référence de service (supprimer l'ancien), puis le coller au lieu d'utiliser le bouton de l'utilitaire de découverte dans la référence du service.

1
DirtyHowi

Étrange également, après avoir regardé et essayé d’autres suggestions, j’obtenais toujours l’erreur disant: Le type ', fourni comme valeur d’attribut Service dans la directive ServiceHost ou fourni dans l’élément de configuration system.serviceModel/serviceHostingEnvironment/serviceActivations est introuvable.

Bien sûr, nous avons tous un gros projet avec beaucoup de DLL. En fait, certains des composants les plus anciens de ma solution ciblaient .Net 4.5 et les nouvelles DLL ont été créées avec la version 4.5.1. Lorsque les dll 4.5 ont référencé les dll 4.5.1 ... Je ne sais pas pourquoi j'étais le joyeux cochon d'Inde à être le premier de mon équipe à le trouver. Bien que le correctif soit évident et assez simple, il suffit que toutes les dll ciblent le même runtime .Net. 

J'aimerais que Visual Studio remarque les DLL de la même solution doivent toutes viser le même runtime .Net et générer un avertissement/une erreur lors de la construction, en particulier avec une solution et une référence de projet. Les runtimes ne correspondent pas ...

1
Dano

Même si cela est légèrement différent de la question (pas Web iis): Je suis arrivé ici par la recherche parce que je rencontrais cette erreur en essayant de déboguer mon service - si vous avez plusieurs services dans une solution unique, cette erreur se produit en question n’est pas encore construit, et par conséquent la DLL n’a pas été créée lorsque vous essayez d’y accéder. Alors, assurez-vous que, si vous utilisez localement, la solution complète est construite!

1
Robert Noack

Comme je ne peux pas voter @jeromeyers pour le moment, je veux ajouter que c’est la solution que j’ai trouvée pour résoudre ce problème.

Quelqu'un avait copié et collé un fichier svc et les fichiers de contrat et de code associés dans un nouveau projet, mais n'avait pas mis à jour les espaces de noms et les noms de classe partout. Très frustrant de retrouver ceci car il a commencé avec cette erreur:

"nom a été lancé avec un caractère non valide. Erreur lors du traitement de la ressource 'fichier: /// C:/...

<% @ServiceHost "

en essayant de faire un clic droit sur le fichier .svc et en faisant "Voir dans le navigateur".

1
Mark P

J'ai eu le même problème lorsque j'ai téléchargé mon service localhost de travail vers un nouvel emplacement sur l'hôte . J'ai créé un nouveau répertoire virtuel et publié mon service via Visual Studio (FTP). Problème résolu.

0
Armin

Une autre raison de ce problème est souvent lorsqu'un service wcf est déplacé d'un répertoire à un autre et que le fichier svc n'a pas été mis à jour ... la solution la plus simple consiste à vérifier votre fichier .svc et à vous assurer que la définition du service est définie correctement.

0
Sean Haddy

J'ai eu ce problème aussi, et ce qui a fait la magie pour moi a été de redémarrer IIS . C'est une erreur très étrange.

0
ParPar

Il m'est arrivé la même chose et la solution consistait à créer un dossier nommé "bin" et à placer la DLL à l'intérieur. Ensuite, actualisez le site Web sur IIS et c'est tout.

0
karolanet333

enter image description hereenter image description here

Première application d'hébergement de l'application de service WCF, dans IIS? Beaucoup ont résolu leurs problèmes d'une manière ou d'une autre. Toutefois, si votre solution est correcte et que votre erreur concerne Host de votre application dans IIS, assurez-vous que votre chemin physique dans IIS lorsque vous ajoutez votre site Web est dirigé vers le répertoire "bin" de votre solution, comme indiqué ci-dessous. les captures d'écran.

0
Julius Depulla

Veuillez regarder https://msdn.Microsoft.com/en-us/library/ms733766(v=vs.100).aspx

Vous devez faire 2 choses pour pouvoir héberger le service sur IIS, ou même sur IIS_EXPRESS itergrated de Visual Studio.

1) Mettez à jour le Web.Config pour inclure ServiceActivations

changement:

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

à

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

2) Vous devez créer un répertoire appelé App_Code dans le répertoire racine . Vous devez maintenant déplacer le service (ex: Service1.svc) du répertoire racine dans le répertoire App_Code . Vous aurez donc App_Code\Service1.svc

Si vous parcourez le service http: // localhost: 63309/Service1.svc cela devrait fonctionner.

0
Greek God