web-dev-qa-db-fra.com

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

J'essaie de consommer un service Web WCF en utilisant une application autonome. Je suis en mesure d'afficher ce service à l'aide d'Internet Explorer, ainsi que d'afficher des références de service Visual Studio. 

C'est l'erreur que je reçois

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).

Comment puis-je changer cela pour utiliser le type de contenu correct?

Voici mon fichier de configuration

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="G2WebServiceSoap11Binding" />
        </basicHttpBinding>
        <customBinding>
            <binding name="G2WebServiceSoap12Binding">
                <textMessageEncoding messageVersion="Soap12" />
                <httpTransport />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://XXX.XX.XX.XX:XX/janus/services/G2WebService.G2WebServiceHttpSoap11Endpoint/"
            binding="basicHttpBinding" bindingConfiguration="G2WebServiceSoap11Binding"
            contract="G2ServiceReference.G2WebServicePortType"
            name="G2WebServiceHttpSoap11Endpoint" />
        <endpoint address="http://XXX.XX.XX.XX:XX/janus/services/G2WebService.G2WebServiceHttpSoap12Endpoint/"
            binding="customBinding" bindingConfiguration="G2WebServiceSoap12Binding"
            contract="G2ServiceReference.G2WebServicePortType"
            name="G2WebServiceHttpSoap12Endpoint" />
    </client>
</system.serviceModel>

voici la pile

{System.ServiceModel.ProtocolException: The content type application/xml;charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. 
The first 1024 bytes of the response were: '<Exception>org.Apache.axis2.AxisFault: The endpoint reference (EPR) for the Operation not found is /janus/services/G2WebService and the WSA Action = null&#xd;
    at org.Apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.Java:89)&#xd;
    at org.Apache.axis2.engine.Phase.invoke(Phase.Java:333)&#xd;
    at org.Apache.axis2.engine.AxisEngine.invoke(AxisEngine.Java:264)&#xd;
    at org.Apache.axis2.engine.AxisEngine.receive(AxisEngine.Java:163)&#xd;
    at org.Apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.Java:136)&#xd;
    at org.Apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.Java:130)&#xd;
    at org.Apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.Java:829)&#xd;
    at org.Apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.Java:255)&#xd;
    at com.rm.janus.webservice.GroupCallServlet.doGet(GroupCallServlet.Java:33)&#xd;
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:690)&#xd;
    at javax.servlet.http.HttpSer'. ---> System.Net.WebException: The remote server returned an error: (500) Internal Server Error.
   at System.Net.HttpWebRequest.GetResponse()
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   --- End of inner exception stack trace ---

Server stack trace: 
   at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding)
   at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
   at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(iMessage message)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(iMessage reqMsg, iMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortType.getStudentData(getStudentDataRequest request)
   at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortTypeClient.G2TestApp.G2ServiceReference.G2WebServicePortType.getStudentData(getStudentDataRequest request) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\InetgrisG2TestApp\Service References\G2ServiceReference\Reference.cs:line 2981
   at InetgrisG2TestApp.G2ServiceReference.G2WebServicePortTypeClient.getStudentData(ServiceRequest serviceReq) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\G2TestApp\Service References\G2ServiceReference\Reference.cs:line 2987
   at InetgrisG2TestApp.Program.Main(String[] args) in c:\Users\s\Documents\Visual Studio 2012\Projects\G2TestApp\G2TestApp\Program.cs:line 57}
13
simon1230756

Il est possible que votre service WCF renvoie du code HTML. Dans ce cas, vous souhaiterez configurer une liaison côté service pour renvoyer XML à la place. Cependant, cela est peu probable: si est le cas, faites le moi savoir et je ferai une modification avec plus de détails.

La raison la plus probable est que votre service génère une erreur qui renvoie une page d'erreur HTML. Vous pouvez consulter cet article de blog si vous souhaitez des détails.

tl; dr: Il existe quelques configurations possibles pour les pages d'erreur. Si vous hébergez sur IIS, vous voudrez supprimer la section <httpErrors> du fichier web.config du service WCF. Si ce n'est pas le cas, veuillez fournir des détails sur votre scénario d'hébergement de services et je peux proposer une modification pour les faire correspondre.

MODIFIER:

Après avoir vu votre modification, vous pouvez voir l’erreur complète renvoyée. Apache ne sait pas quel service vous souhaitez appeler et génère une erreur pour cette raison. Le service fonctionnera correctement une fois que vous aurez le bon terminal - vous êtes dirigé au mauvais endroit. Malheureusement, je ne peux pas dire, à partir des informations disponibles, quel est l'emplacement droit, mais votre action (actuellement null!) Ou l'URL est incorrecte. 

16
Steven Westbrook

Lorsque j'ai rencontré cette erreur, j'ai passé des heures à essayer de trouver une solution. 

Mon problème était que lorsque je suis allé sauvegarder le fichier, j'avais accidentellement touché le trait de clé "G" dans le fichier web.config. J'avais un caractère de traîneau juste assis dehors, de sorte que web.config ne savait pas comment interpréter les données mal formatées.

J'espère que cela t'aides.

6
Demodave

Au cas où...
Si vous utilisez SoapUI Mock Service (en tant que serveur), appelez-le depuis un C # WCF:

WCF --> SoapUI MockService

Et dans ce cas, vous obtenez la même 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).

Modifiez votre réponse fictive sur SoapUI et ajoutez-lui un en-tête:  enter image description here

Dans mon scénario, cela corrige le problème.

3
Ualter Jr.

Dans le projet de série WCF, ce problème peut être dû à la référence de la version différente de System.Web.Mvc.dll ou à un autre problème de version de toute autre DLL. Donc, cela peut être un problème de compatibilité de la version différente de DLL

Quand j'utilise

System.Web.Mvc.dll version 5.2.2.0 -> il relève le Erreur Le type de contenu text/html; charset = utf-8 du message de réponse

mais quand j'utilise

System.Web.Mvc.dll version 4.0.0.0 ou antérieure -> C'est fonctionne très bien dans mon projet et ne comporte pas d'erreur.

Je ne connais pas la raison de cette version différente du problème de la DLL, mais lorsque je modifie la version de la DLL compatible avec votre projet WCF, elle fonctionne correctement.

Cette erreur est même générée lorsque vous ajoutez une référence à un autre projet dans votre projet WCF et que ce projet de référence a une version différente de System.Web.Mvc DLL ou peut être une autre DLL.

1
Dilip0165

Nous utilisons l’extension Url Rewrite pour IIS pour rediriger toutes les demandes HTTP vers HTTPS. Lorsque vous essayez d'appeler un service qui n'utilise pas la sécurité du transport sur une adresse http: // ..., c'est l'erreur qui est apparue.

Il serait donc utile de vérifier si vous pouvez accéder aux adresses http et https du service via un navigateur et s’il ne vous transfère pas automatiquement avec un code de statut 303.

1
Tikall

Essayez de parcourir la WCF dans IIS pour voir si elle est vivante et fonctionne normalement 

Dans mon cas, c'est parce que le chemin physique de la WCF est mal dirigé.

0
yu yang Jian

Cela pourrait être une erreur dans le fichier web.config.

Ouvrez votre URL dans votre navigateur, exemple:

http://localhost:61277/Email.svc

Vérifiez si vous avez une erreur 500.

HTTP Error 500.19 - Internal Server Error

Recherchez l'erreur dans ces sections:

Erreur de configuration

Fichier de configuration

0
live-love

Dans mon cas, c'était simplement une erreur dans le fichier web.config.

J'ai eu:

<endpoint address="http://localhost/WebService/WebOnlineService.asmx" 

Cela aurait dû être:

<endpoint address="http://localhost:10593/WebService/WebOnlineService.asmx"

Le numéro de port (: 10593) était manquant dans l'adresse.

0
Keith Grant