web-dev-qa-db-fra.com

Attribut de contrat non valide pour IMetadataExchange

J'ai mis à niveau un service WCF vers .NET Framework 4.5. Après cela, j’ai remarqué une ligne ondulée bleue autour de IMetaDataExchange dans le fichier de configuration de l’hôte.

Voici à quoi ressemble la section services de la configuration:

<services>
    <service behaviorConfiguration="MyBehavior" name="MyServiceHost">
        <endpoint binding="wsHttpBinding" bindingConfiguration="noSecurityBinding" contract="MyServiceContract"/>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

Lorsque je passe la souris sur IMetadataExchange, l'erreur dit:

L'attribut 'contrat' est invalide - La valeur 'IMetadataExchange' est invalide selon son type de données 'serviceContractType' - La contrainte d'énumération a échoué.

Le service semble bien fonctionner. Donc, je suis curieux de savoir pourquoi est-ce invalide.

34
isxpjm

Pouvez-vous supprimer le fichier .SUO (fichier d'options utilisateur de solution) après la fermeture de VS? Cela réinitialisera le cache du composant XMLEditor dans VS et corrigera votre problème. 

50
Anand

J'ai ajouté System.ServiceModel aux références du projet et il est parti

14
Scott

J'ai eu un problème similaire à celui-ci: plusieurs attributs name et contract apparaissant dans le composant App.Config de mon service WCF avec le sinueux pli bleu et les avertissements apparaissant dans la liste des erreurs.

Dans mon cas, le problème était qu'après avoir créé les services et les contrats, j'avais restructuré les espaces de noms du projet de service. Le fichier * .xsd généré par la solution générée utilisait les nouveaux espaces de noms, mais mon outil de refactoring n'avait pas mis à jour l'application App les changements. Entrer et ajouter les espaces de noms entièrement spécifiés ont résolu le problème.

10
cori

Peut-être pas la réponse pour l'OP, mais les autres personnes ayant ce problème devraient vérifier que [ServiceContract] est déclaré pour la interface de vos services, car cela produit l'erreur exacte.

7
Colin Steel

SI vous utilisez Intellisense sur l’avertissement. Une liste vous permettant de choisir vous permet d'appeler explicitement ce membre.

3
CrIceIs

Si la suppression du fichier .SUO ne fonctionne pas, vérifiez vos références pour vous assurer que vous disposez de la référence System.ServiceModel. Cela a fini par être la question qui m'a amené ici.

3
Carl Forgey

La fermeture de VS2013 Prof, la suppression du dossier "obj" et la recompilation ont fait le travail pour moi.

1
Zoba

J'ai trouvé que le problème était que l'attribut contract est sensible à la casse.

J'avais une solution différente qui faisait référence au même service, mais je n'avais aucun avertissement dans le fichier app.config. J'ai lancé la comparaison dans le bloc-notes ++ dans la section system.serviceModel de l'app.config et cela a mis en évidence la différence de casse entre les deux attributs du contrat.

dès que j’ai modifié l’attribut de contrat avec l’orthographe correcte sensible à la casse, l’avertissement a disparu instantanément

1
thehill

J'ai résolu le problème ... Si vous avez déjà changé votre classe C # dans Service1.cs et IService1.cs. Mettez également à jour l'attribut name dans l'élément de service "<espace de noms>. <Nom de classe>" et l'attribut de contrat dans l'élément endpoind "<espace de noms>. <Nom de classe>" dans votre App.config.

BTW. désolé pour le mauvais anglais :) 

0
r3kkusu

J'ai eu le même problème côté client. Pour moi, la solution consistait à supprimer et à ajouter à nouveau la référence de service.

0
L C