78 votes

Content Type text/xml ; charset=utf-8 n'était pas supporté par le service

J'ai un problème avec un service WCF. J'ai une application console et je dois consommer le service sans utiliser app.config, donc j'ai dû définir le point de terminaison, etc. par code. J'ai bien une référence de service au svc, mais je ne peux pas utiliser l'app.config. Voici mon code :

BasicHttpBinding binding = new BasicHttpBinding();

EndpointAddress address = new EndpointAddress("http://localhost:8731/WcfServicio/MiServicio");

MiServicioClient svc = new MiServicioClient(binding, address);
object ob = svc.PaisesObtener();

A la dernière ligne quand je fais svc.PaisesObtener() Je reçois l'erreur :

Content Type text/xml; charset=utf-8 was not supported by service
http://localhost:8731/WcfServicio/MiServicio.  The client and service bindings may be mismatched.

158voto

CodeCaster Points 38181

Le premier résultat de Google dit :

Il s'agit généralement d'un décalage dans les liaisons client/serveur, où la version du message dans le service utilise SOAP 1.2 (qui attend application/soap+xml) et la version dans le client utilise SOAP 1.1 (qui envoie text/xml). WSHttpBinding utilise SOAP 1.2, BasicHttpBinding utilise SOAP 1.1.

Il semble généralement y avoir un wsHttpBinding d'un côté et un basicHttpBinding de l'autre.

0 votes

J'ai le même problème. Mon web.config liste 2 endpoints, le premier address="basic" binding="basicHttpBinding" et le second address="secure" binding="basicHttpsBinding" mais lorsque j'essaie d'ajouter la référence de service dans Visual Studio, j'obtiens l'erreur suivante.

2 votes

@PedroC88 à partir de ça, je ne peux pas dire ce qui ne va pas. Essayez d'ouvrir votre propre question, mais veillez à indiquer toutes les configurations et étapes que vous avez essayées, par exemple si vous pouvez visiter l'URL du service à partir d'un navigateur et si WcfTestClient.exe peut accéder au service.

0 votes

Dans mon cas, j'avais copié le lien du chemin vers mon point de terminaison des métadonnées au lieu de ma liaison http de base lorsque j'ai eu cette erreur

27voto

mykola.rykov Points 147

N'oubliez pas de vérifier également le code relatif aux liaisons. Donc si vous avez écrit :

BasicHttpBinding binding = new BasicHttpBinding();

Assurez-vous que tous vos app.config Les fichiers contiennent

<endpoint address="..."
          binding="basicHttpBinding" ...

pas le

<endpoint address="..."
          binding="wsHttpBinding" ...

ou plus.

0 votes

La mise à jour de la configuration ( wsHttpBinding a basicHttpBinding ) était le ticket pour moi. Merci !

8voto

rene Points 14522

J'ai vu ce comportement aujourd'hui lorsque le

   <service name="A.B.C.D" behaviorConfiguration="returnFaults">
        <endpoint contract="A.B.C.ID" binding="basicHttpBinding" address=""/>
    </service>

était manquant dans le web.config. Le site service.svc Le fichier était là et a été servi. Il a fallu un certain temps pour réaliser que le problème n'était pas dans la configuration de la liaison elle-même...

3voto

D. Diamond Points 31

J'ai rencontré ce problème aujourd'hui en essayant de créer un proxy de service WCF, en utilisant VS2010 et svcutil.

Tout ce que je fais est avec basicHttpBinding (donc pas de problème avec wsHttpBinding ).

Pour la première fois à ma connaissance, MSDN m'a fourni la solution, au lien suivant Comment faire : Publier des métadonnées pour un service à l'aide d'un fichier de configuration . La ligne que je devais modifier se trouvait à l'intérieur de l'élément de comportement du service MEX, dans mon fichier app.config du service. Je l'ai changé de

<serviceMetadata httpGetEnabled="true"/>  

à

<serviceMetadata httpGetEnabled="true" policyVersion="Policy15"/>

et comme par magie l'erreur a disparu et j'ai pu créer le service proxy. Notez qu'il existe une entrée MSDN correspondante pour l'utilisation du code au lieu d'un fichier de configuration : Comment faire : Publier des métadonnées pour un service en utilisant du code.

(Bien sûr, Politique15 - comment ai-je pu négliger cela ???)

Un autre "piège" : mon service doit exposer 3 points d'extrémité différents, chacun supportant un contrat différent. Pour chaque proxy que j'ai dû construire, j'ai dû commenter les deux autres points de terminaison, sinon svcutil se serait plaint de ne pas pouvoir résoudre l'adresse URL de base.

1voto

Sumit Agrawal Points 683

J'ai été confronté à un problème similaire lors de l'utilisation de la Channel Factory. Il était en fait dû à un mauvais contrat spécifié dans le point de terminaison.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X