2010-02-09 17 views
25

Ich versuche einen Dienst zu erstellen, den ein Drittanbieter hoffentlich konsumieren sollte.
Der Consumer ist kompatibel mit SOAP 1.1, weshalb ich basicHttpBinding für den Server verwende. Wenn die tatsächliche Anfrage erfolgt, scheint etwas mit den vom Server erwarteten Inhaltstypen zu schiefzugehen. Mit basicHttpBinding verstehe ich nicht, warum der Server immer noch 'application/soap + xml' erwartet, was meines Wissens nur von SOAP 1.2 benötigt wird.

Ich habe wiresharsh verwendet, um genau herauszufinden, worüber diese beiden kommuniziert haben. Siehe tcp-Stream und Setup unten.

Jede Hilfe wird geschätzt.

WCF und Soap 1.1

3rd party app Anfrage

POST/HTTP/1.1

Soapaction: http://tempuri.org/ITestService/Hello

Content-Type: text/xml; charset = utf-8

Host: shdesktop: 8000

Content-Length: 297

erwarten: 100-Continue

Anschluss: Schließen

WCF Server Antwort

HTTP/1.1 415 Die Nachricht kann nicht verarbeitet werden, da der Inhaltstyp 'text/xml; charset = utf-8 'war nicht der erwartete Typ' application/soap + xml; charset = utf-8 '.

Content-Length: 0

Server: Microsoft-HTTPAPI/2.0

Datum: Di, 9. Februar 2010 14.03.19 GMT

Anschluss: schließen

Servicekonfiguration

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="behTestService" name="ConsoleApplication1.TestService"> 
     <endpoint address="" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <endpoint address="TestService" binding="basicHttpBinding" 
      contract="ConsoleApplication1.ITestService" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8000" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="behTestService"> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
Im Allgemeinen

Antwort

19

Die basicHttpBinding verwendet SOAP 1.1 - aber in diesem Fall hätten Sie einen Inhaltstyp von application/soap+xml.

Da Ihr Client sendet text/xml - jede Chance, die sie eine REST-Schnittstelle erwarten? Dies würde von der WCF webHttpBinding gehandhabt werden.

Lesen Sie mehr über REST in WCF auf der MSDN WCF REST Developer Center und überprüfen Sie die Pluralsight screencast series on WCF REST - sehr zu empfehlen!

+0

oh, würde SOAP 1.1 'application/soap + xml' verwenden? Ich werde das WebHttpBinding morgen testen, danke! Ich weiß für eine Tatsache, dass es funktioniert, wenn ich einen einfachen asmx-Service erstelle, wenn es einen Unterschied macht. –

+2

@Silas: "alten Stil" ASP.NET Webservices (ASMX) ** und ** WCF basicHttpBinding verwenden SOAP 1.1 - so sollte das in Ordnung sein, wirklich. Sie müssen überprüfen, ob Ihr Client Ihnen eine SOAP-Anfrage sendet, oder nur versuchen, eine XML an Ihre URL –

+0

Ich rief http: // statt ich musste http: // /TestService aufrufen. Dummer Fehler von mir. Danke für die Hilfe! –

6

, wenn wir eine Nachricht/Fehler in einem Web-Service zu erhalten, die den Text enthält:

content type 'text/xml' 

Es bedeutet, dass der Web-Server eine Fehlerseite anstelle der erwarteten XML-Antwort zurückgegeben.

3

Ich hatte genau das gleiche Problem - die Definition sagte, dass es Seife 1.2 war, aber 1.1 erwartet, da der Inhaltstyp anders war.

Ich fand, dass, wenn ich von meinem Server-Konfiguration angepasst:

... 
<endpoint address="" .../> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8001/services/fooService" /> 
     </baseAddresses> 
    </host> 
... 

An:

... 
<endpoint address="fooService" .../> 
    <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:8001/services" /> 
     </baseAddresses> 
    </host> 
... 

Die wsdl ausgesetzt als Soap 1.1 diesmal.

Verwandte Themen