web-dev-qa-db-fra.com

La valeur n'est pas valide selon son type de données 'clientcontracttype'

Je reçois un message d'erreur disant: 

L'attribut de contrat n'est pas valide. la valeur est invalide selon son type de données 'clientcontracttype'

Voici la configuration du noeud final dans web.config de cette application WCF. J'utilise .NET Framework 4.5 et Visual Studio 2012 . J'ai vérifié que le contrat OnlineReporting.Core.Contracts.IReportingInternalWcfPortal est déjà là.

<endpoint address="http://localhost:63817/ReportingInternalWcfPortal.svc" 
          binding="basicHttpBinding" 
          bindingConfiguration="BasicHttpBinding" 
          contract="OnlineReporting.Core.Contracts.IReportingInternalWcfPortal" 
          name="ReportingInternalPortal" />
21
Nirman

Je vois que cette question est assez ancienne et je ne sais pas si vous avez déjà trouvé une solution, mais juste au cas où, voici ce que j'ai trouvé qui va résoudre:

1) Dans l'explorateur de solutions, sous le dossier Références de service, cliquez avec le bouton droit de la souris sur le nom de la référence de service portant le problème et sélectionnez "Configurer la référence de service".

2) La fenêtre Service Reference Settings apparaîtra. Décochez la case "Réutiliser les types dans les assemblages référencés" et cliquez sur le bouton OK.

3) Reconstruisez le projet.

Après la reconstruction, l'avertissement devrait disparaître.

20
TK71

J'ai trouvé cette question à la recherche de la même erreur sur un projet de service Web.

Dans mon cas, cette erreur s'est produite lorsque j'ai oublié d'ajouter l'attribut [ServiceContract] sur l'interface IServiceBase.

Dès que je l'ai ajouté dans l'erreur est parti.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace MyService
{
    [ServiceContract]
    public interface IServiceBase
    {
        [OperationContract]
        IEnumerable<ListItem> GetListItems();

        [OperationContract]
        void SaveListItems(IEnumerable<ListItem> listItems);
    }
20
OrangeKing89

La même erreur se produit lorsqu'il manque une référence [dans le projet avec le fichier .config] au projet/bibliothèque contenant le contrat d'interface/service ...

10

Dans mon cas, j'ai modifié le contrat de service en supprimant involontairement une interface essentielle au contrat de service.

Quelques semaines plus tard, j'ai trouvé un client cassé avec une référence de service obsolète. Depuis que la suppression de l'interface était une erreur, je l'ai remise en place.

Une autre solution possible consisterait à reconstruire la référence de service pour qu'elle corresponde au nouveau contrat de service (dans mon cas, cela aurait brisé la construction du projet puisque l'interface référencée avait été supprimée).

Merci à OrangeKing89 de m'avoir orienté dans la bonne direction. Je savais que le contrat de service pouvait être modifié.

3
Steve

Je me rends compte que c’est un vieux fil, mais dans mon cas, le problème était que quelqu'un avait déjà ajouté une référence de service au projet, puis avait décidé de choisir un autre chemin, La suppression de cette entrée dans web.config a résolu le problème pour moi.

1
Josh

Dans mon cas, j'ai eu un conflit de noms.

Lorsque vous ajoutez une référence de service, visual studio génère une classe client en tant que proxy qui implémente le contrat. Le nom par défaut de ce proxy est le nom du service ajouté par "Client". Par conséquent, si votre service est "MyService", la classe client être "MyServiceClient".

Mon problème était que mon nom de projet était "MyServiceClient"! qui a causé ce conflit. 

1
Emad Alashi

Je sais que cette question est ancienne, mais j'ai rencontré le même problème avec C # et Visual Studio 2017. Tout fonctionnait bien et la compilation était bonne, alors ce n'était pas le cas. Je suis passé de .Net 4.6.2 à 4.6, SQLite v108 ne prenant pas en charge 108, alors j'ai reçu cette erreur et d'autres. Il m'a fallu un peu de temps pour rechercher une solution. Je n'ai vu ma solution nulle part et j'ai donc pensé la placer pour l'avenir.

J'ai supprimé ma référence de service, archivé toutes mes modifications dans TFS, puis rajouté la référence de service. J'ai ensuite construit la solution et tout allait bien à nouveau.

J'ai vérifié le fichier app.config et d'autres fichiers et tout semblait aller bien, mais je ne l'avais pas construit. De toute évidence, VS2017 introduit les informations de version .Net quelque part mais pas à l’évidence.

Espérons que ma solution aide quelqu'un.

0
Sarah Weinberger