2013-03-18 13 views
12

Ich versuche, einen WCF-Webdienst mit Standalone zu verwenden Anwendung. Ich kann diesen Dienst mit Internet Explorer anzeigen, der auch in Visual Studio-Dienstverweisen angezeigt werden kann.Der Inhaltstyp application/xml; charset = utf-8 der Antwortnachricht stimmt nicht mit dem Inhaltstyp der Bindung überein (text/xml; charset = utf-8)

Dies ist der Fehler 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 kann ich das den richtigen Inhaltstyp zu verwenden, ändern?

Hier ist meine Config-Datei

<?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} 
+0

erhalten Sie Fehler für beide Endpunkte? posten Sie auch den Ausnahme-Stack – Dhawalk

+0

Überprüfen Sie den Ausnahmeinhalt. Sehen Sie, ob Sie eine "InnerException" oder etwas Nützliches in der Eigenschaft "Details" haben. –

+0

Überprüfen Sie diese Frage http://stackoverflow.com/questions/5263150/the-content-type-text-html-charset-utf-8-of-the-response-message-does-not-match – Dhawalk

Antwort

15

Es ist möglich, dass Ihre WCF-Dienst HTML zurückkehrt. In diesem Fall sollten Sie auf der Serviceseite eine Bindung einrichten, um stattdessen XML zurückzugeben. Dies ist jedoch unwahrscheinlich: Wenn es ist der Fall, lass es mich wissen, und ich werde eine Bearbeitung mit mehr Details machen.

Der wahrscheinlichere Grund ist, dass Ihr Dienst einen Fehler auslöst, der eine HTML-Fehlerseite zurückgibt. Sie können einen Blick auf this blog post werfen, wenn Sie Details wünschen.

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

EDIT:

deine Bearbeitung gesehen haben, Sie den vollständigen Fehler zurückgegeben werden sehen können. Apache kann nicht feststellen, welchen Dienst Sie aufrufen möchten, und aus diesem Grund gibt es einen Fehler. Der Dienst funktioniert einwandfrei, sobald Sie den richtigen Endpunkt haben - Sie werden auf den falschen Standort verwiesen. Ich kann leider aus den verfügbaren Informationen nicht ersehen, was der Standort rechts ist, aber entweder Ihre Aktion (derzeit null!) Oder die URL ist falsch.

+0

Hallo, sollte es XML zurückgeben – simon1230756

+0

Der WEb-Service ist ein Kunden Ich habe keinen Zugriff auf diese, außer der URL, die ich zu konsumieren – simon1230756

+0

Hallo bin, redigiert nur meine Antwort nach dem Stack-Trace sehen Sie in. Sieht aus Sie müssen Ihre Endpunktadresse ändern. –

6

Als ich auf diesen Fehler stieß, verbrachte ich Stunden damit, eine Lösung zu finden.

Mein Problem war, dass, als ich ging, um die Datei zu speichern, hatte ich versehentlich den Schlüsselstrich "G" in der web.config. Ich hatte einen Nachzügler-Charakter, der nur draußen saß, also wusste die web.config nicht, wie man die falsch formatierten Daten interpretierte.

Hoffe, das hilft.

1

Wir verwenden die URL-Rewrite-Erweiterung für IIS zum Umleiten aller HTTP-Anforderungen an HTTPS. Wenn Sie versuchen, einen Dienst aufzurufen, der keine Transportsicherheit auf einer http: // ...-Adresse verwendet, ist dies der Fehler, der aufgetreten ist.

Es könnte sich also lohnen, zu überprüfen, ob Sie sowohl die HTTP- als auch die HTTPS-Adresse des Dienstes über einen Browser erreichen können und dass er Sie nicht automatisch mit einem 303-Statuscode weiterleitet.

0

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 (: 10.593) wurde von der Adresse fehlt.

0

Dies könnte ein Fehler in der Datei web.config sein.

Öffnen Sie die URL in Ihrem Browser auf, Beispiel:

http://localhost:61277/Email.svc 

Überprüfen Sie, ob Sie einen 500 Fehler haben.

HTTP Error 500.19 - Internal Server Error 

Geben Sie für den Fehler in den Sektionen:

Config Error

Config File

2

Nur für den Fall ...
Wenn Sie SoapUI Mock-Service verwenden (als der Server), ruft es von einer C# WCF:

WCF --> SoapUI MockService 

Und in diesem Fall, dass Sie die gleiche Fehlermeldung erhalten:

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 Antwort auf SoapUI und einen Kopf, um es hinzuzufügen: enter image description here

In meinem Szenario behebt das Problem .

+0

Mein Problem genau. Eine Million Dank für die Lösung :) – paulsm4

1

Im WCF-Projekt server kann dieses Problem auf die unterschiedliche Version von System.Web.Mvc.dll oder auf ein anderes Versions-Problem einer anderen DLL zurückzuführen sein. So kann dieses Kompatibilitätsproblem der anderen Version der DLL sein

Wenn ich

System.Web.Mvc.dll Version 5.2.2.0 -> es thorows die Fehler Der Inhaltstyp text/html; charset = utf-8 der Antwortnachricht

aber wenn ich

System.Web.Mvc.dll Version 4.0.0.0 oder niedriger -> Das ist feine in meinem Projekt arbeitet und nicht haben Error.

Ich weiß nicht, der Grund für diese andere Version von DLL-Problem, aber wenn ich die DLL-Version ändern, die mit Ihrem WCF-Projekt kompatibel ist, als es funktioniert.

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

+0

Ich bekomme Text/HTML-Ausnahme nur für eine Funktion, wo ich die Größe des hochgeladenen Bildes mit WebImage reduzieren. – user3217843

0

Versuchen Sie, die WCF in IIS sehen, ob es noch lebt und arbeitet normal,

In meinem Fall ist es, weil der physische Pfad des WCF misdirected ist.

Verwandte Themen