2010-02-09 5 views
25

J'essaye de créer un service qu'un tiers devrait consommer.
Le consommateur est compatible avec SOAP 1.1, c'est pourquoi j'utilise basicHttpBinding pour le serveur. Lorsque la demande est faite, quelque chose ne va pas avec les types de contenu attendus par le serveur. En utilisant basicHttpBinding, je ne comprends pas pourquoi le serveur attend encore 'application/soap + xml' qui, à ma connaissance, n'est requis que par SOAP 1.2.

J'ai utilisé wireshark pour comprendre exactement ce que les deux communiquaient. Voir le flux et la configuration de tcp ci-dessous.

Toute aide est appréciée.

WCF et savon 1.1

demande app 3ème partie

POST/HTTP/1.1

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

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

hôte: shdesktop: 8000

Content-Length: 297

Attendez-vous à: 100 continuer

Connexion: Fermer

réponse WCF Server

HTTP/1.1 415 Impossible de traiter le message car le type de contenu 'text/xml; charset = utf-8 'n'était pas le type attendu ' application/soap + xml; jeu de caractères = utf-8 '.

Content-Length: 0

serveur: Microsoft-HTTPAPI/2.0

Date: Mar Feb 2010 14:03:19 09 GMT

Connection: close

Configuration du service

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

Répondre

19

Le basicHttpBinding utilise SOAP 1.1 - mais dans ce cas, vous auriez un type de contenu de application/soap+xml.

Étant donné que votre client envoie text/xml - une chance qu'ils attendent une interface REST? Ce serait géré par le WCF webHttpBinding.

En savoir plus sur REST dans WCF sur le MSDN WCF REST Developer Center et consultez le Pluralsight screencast series on WCF REST - fortement recommandé!

+0

oh, SOAP 1.1 utiliserait 'application/soap + xml'? Je vais tester le webHttpBinding demain, merci! Je sais pertinemment que cela fonctionne quand je crée un simple service asmx, si cela fait une différence. –

+2

@Silas: les services Web ASP.NET "old-style" (ASMX) ** et ** WCF basicHttpBinding utilisent SOAP 1.1 - cela devrait donc être correct. Vous devez vérifier si votre client vous envoie une requête SOAP, ou tout simplement essayer de poster un fichier XML à votre URL –

+0

j'appelle http: // au lieu que je devais appeler http: // /TestService. Erreur stupide de ma part. Merci pour toute l'aide si! –

6

En général, lorsque nous recevons un message/erreur dans un service Web qui comprend le texte:

content type 'text/xml' 

Cela signifie que le serveur Web retourne une page d'erreur au lieu de la réponse XML attendue.

3

J'ai eu exactement le même problème - la définition disait que c'était du savon 1.2 mais attendait 1.1 car le type de contenu était différent.

Je trouve que si j'ajusté ma configuration de serveur à partir de:

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

Pour:

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

Le wsdl exposé comme Soap 1.1 cette fois-ci.