web-dev-qa-db-fra.com

Le type de contenu text/html; charset = UTF-8 du message de réponse ne correspond pas au type de contenu de la liaison (text/xml; charset = utf-8)

J'ai créé le service WCF et testé le client WCF à l'aide d'une application autonome. J'ai été en mesure d'afficher ce service à l'aide d'Internet Explorer, ainsi que d'afficher des références de service Visual Studio. Voici le message d'erreur.

"The content type text/html; charset=UTF-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8)."

Pourriez-vous s'il vous plaît conseiller ce qui pourrait être faux?

Je vous remercie.

13
nav100

Étant donné que le type de contenu renvoyé est text/html, je suspecte que votre appel génère une erreur côté serveur en dehors de WCF (vous recevez une page d'erreur HTML).

Essayez d'afficher la réponse avec un proxy de débogage Web tel que Fiddler .


(Éditer en fonction des commentaires):

D'après vos commentaires, je constate que votre WCF est hébergé sous Sharepoint 2010, sur un site authentifié par formulaire.

L'erreur que vous recevez est due au fait que votre client WCF n'est PAS authentifié avec sharepoint - il ne possède pas de cookie d'authentification valide. Sharepoint renvoie ensuite une redirection HTTP vers une page HTML (la page login.aspx); ce qui n'est pas prévu par votre client WCF.

Pour aller plus loin, vous devrez obtenir un cookie d'authentification auprès de Sharepoint (voir Service Web d'authentification ) et le transmettre à votre client WCF.


(Modification mise à jour):

Erreur: le site utilise une authentification basée sur une revendication.

Bien que cela ne soit pas nécessairement dû aux cookies ou à l'authentification par formulaire, l'explication du message d'erreur fourni reste la même. Un problème d'authentification entraîne une redirection vers une page HTML, qui n'est pas gérée par le client WCF.

17
Sam B

Cela peut être utile, vérifiez les règles de réécriture d'URL dans ISS 7. Ce problème se produira si vous n'avez pas configuré la règle correctement.

2
user2493343

Ajoutez le code suivant au projet de serveur web.config

<system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="basicHttpBinding_IService">
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>

<services>
  <service name="Service">
    <endpoint address="" name="BasicHttpBinding_IService"
              binding="basicHttpBinding"
              bindingConfiguration="basicHttpBinding_IService"
              contract="IService" />
  </service>

puis mettez à jour le service Web client, après la mise à jour, les modifications suivantes sont apportées à web.config

<bindings>
  <basicHttpBinding>
    <binding name="BasicHttpBinding_IService">
      <security mode="Transport" />
    </binding>
  </basicHttpBinding>
</bindings>


  <endpoint address="https://www.mywebsite.com/Service.svc"
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService"
    contract="Service.IService" name="BasicHttpBinding_IService" />

J'espère être utile

0
vajihe

On dirait que votre application attend XML, mais reçoit du texte brut. Quel type d'objet passez-vous?

0
smartcaveman

text/html est l’entête SOAP 1.1 et Content-Type: application/soap + xml est SOAP 1.2 Vérifiez vos liaisons et renvoyez l’en-tête . Il devrait être identique 1.1 ou 1.2.

0
Taran