webentwicklung-frage-antwort-db.com.de

Der Inhaltstyp application/xml; charset = utf-8 der Antwortnachricht stimmt nicht mit dem Inhaltstyp der Bindung überein (text/xml; charset = utf-8).

Ich versuche, einen WCF-Webdienst mit einer eigenständigen Anwendung zu nutzen. Ich kann diesen Dienst mithilfe von Internet Explorer anzeigen, der auch in Visual Studio-Dienstreferenzen angezeigt werden kann. 

Dies ist der Fehler, den ich erhalte

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

Wie ändere ich dies, um den richtigen Inhaltstyp zu verwenden?

Hier ist meine Konfigurationsdatei

<?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>

hier ist der Stapel

{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

Möglicherweise gibt Ihr WCF-Dienst HTML zurück. In diesem Fall möchten Sie eine Bindung auf der Serviceseite einrichten, um stattdessen XML zurückzugeben. Dies ist jedoch unwahrscheinlich: Wenn dies der Fall ist , lassen Sie es mich wissen und ich werde eine Bearbeitung mit mehr Details vornehmen.

Der wahrscheinlichere Grund ist, dass Ihr Dienst einen Fehler ausgibt, der eine HTML-Fehlerseite zurückgibt. Sie können einen Blick auf diesen Blog-Beitrag werfen, wenn Sie Details möchten.

tl; dr: Es gibt einige mögliche Konfigurationen für Fehlerseiten. Wenn Sie auf IIS hosten, möchten Sie den Abschnitt <httpErrors> aus der Datei web.config des WCF-Dienstes entfernen. Wenn nicht, geben Sie bitte Einzelheiten zu Ihrem Service-Hosting-Szenario an, und ich kann eine entsprechende Bearbeitung vorschlagen.

EDIT:

Nachdem Sie Ihre Bearbeitung gesehen haben, können Sie sehen, dass der vollständige Fehler zurückgegeben wird. Apache kann nicht sagen, welchen Dienst Sie anrufen möchten, und gibt aus diesem Grund einen Fehler aus. Der Dienst funktioniert einwandfrei, sobald Sie den richtigen Endpunkt haben - Sie werden auf den falschen Ort verwiesen. An den verfügbaren Informationen kann ich leider nicht erkennen, wo sich der richtige Ort befindet, aber entweder Ihre Aktion (derzeit null!) Oder die URL ist falsch.

16

Als ich auf diesen Fehler stieß, habe ich stundenlang versucht, eine Lösung zu finden. 

Mein Problem war, dass ich beim Speichern der Datei versehentlich den Schlüsselstrich "G" in der web.config gedrückt hatte. Ich hatte gerade einen Straggler-Charakter, der gerade draußen sitzt, daher wusste die web.config nicht, wie sie die falsch formatierten Daten interpretieren soll.

Hoffe das hilft.

6
Demodave

Nur für den Fall ...
Wenn Sie SoapUI Mock Service (als Server) verwenden, rufen Sie ihn von einer C # WCF aus auf

WCF --> SoapUI MockService

In diesem Fall erhalten Sie den gleichen Fehler:

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

Bearbeiten Sie Ihre Mock Response unter SoapUI und fügen Sie einen Header hinzu:  enter image description here

In meinem Szenario wird das Problem dadurch behoben.

3
Ualter Jr.

In einem seriellen WCF-Projekt kann dieses Problem auf eine andere Version der Referenz von System.Web.Mvc.dll oder auf ein anderes Versionsproblem einer anderen DLL zurückzuführen sein. Dies kann also ein Kompatibilitätsproblem der unterschiedlichen Version von DLL sein

Wenn ich benutze

System.Web.Mvc.dll Version 5.2.2.0 -> Er führt den Fehler durch Der Inhaltstyp text/html; charset = utf-8 der Antwortnachricht

aber wenn ich benutze

System.Web.Mvc.dll Version 4.0.0.0 oder niedriger -> Das ist funktioniert gut in meinem Projekt und hat keinen Fehler.

Ich kenne den Grund für diese andere Version des DLL-Problems nicht, aber wenn ich die Version der DLL ändere, die mit Ihrem WCF-Projekt kompatibel ist, funktioniert es einwandfrei.

Dieser Fehler wird auch generiert, wenn Sie in Ihrem WCF-Projekt einen Verweis auf ein anderes Projekt hinzufügen und dieses Referenzprojekt über eine andere Version von System.Web.Mvc DLL verfügt oder eine andere DLL sein könnte.

1
Dilip0165

Wir verwenden die Url Rewrite-Erweiterung für IIS, um alle HTTP-Anforderungen an HTTPS umzuleiten. Wenn Sie versuchen, einen Dienst aufzurufen, der keine Transportsicherheit für eine http: // ... -Adresse verwendet, ist dies der Fehler, der angezeigt wurde.

Es lohnt sich also zu prüfen, ob Sie sowohl die http- als auch die https-Adresse des Dienstes über einen Browser abrufen können und nicht automatisch mit einem 303-Statuscode weitergeleitet werden.

1
Tikall

Durchsuchen Sie die WCF in IIS, um zu sehen, ob sie lebendig ist und normal funktioniert. 

In meinem Fall liegt das daran, dass der physische Pfad der WCF fehlgeleitet wird.

0
yu yang Jian

Dies kann ein Fehler in der Datei web.config sein.

Öffnen Sie Ihre URL in Ihrem Browser. Beispiel:

http://localhost:61277/Email.svc

Prüfen Sie, ob Sie einen Fehler 500 haben.

HTTP Error 500.19 - Internal Server Error

Suchen Sie in den folgenden Abschnitten nach dem Fehler:

Konfigurationsfehler

Konfigurationsdatei

0
live-love

In meinem Fall war es einfach ein Fehler in der web.config.

Ich hatte:

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

Es hätte sein sollen:

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

Die Portnummer (: 10593) fehlt in der Adresse.

0
Keith Grant