J'essaie de créer un service qu'un tiers devrait, espérons-le, consommer.
Le consommateur est compatible avec SOAP 1.1, c'est pourquoi j'utilise basicHttpBinding pour le serveur. Lorsque la demande réelle est effectuée, il semble que quelque chose ne va pas avec les types de contenu attendus Utilisation de basicHttpBinding Je ne comprends pas pourquoi le serveur attend toujours 'application/soap + xml' qui, à ma connaissance, n'est requis que par SOAP 1.2.
J'ai utilisé WireShark pour savoir exactement sur quoi ces deux-là communiquaient. Voir le flux tcp et la configuration ci-dessous.
Toute aide est appréciée.
Demande d'application tierce
POST/HTTP/1.1
SOAPAction: http://tempuri.org/ITestService/Hello
Type de contenu: texte/xml; jeu de caractères = utf-8
Hébergeur: shdesktop: 8000
Contenu-Longueur: 297
Attendez-vous à: 100-continuer
Connexion: Fermer
Réponse du serveur WCF
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 09 février 2010 14:03:19 GMT
Connexion: fermer
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>
Le basicHttpBinding
utilise SOAP 1.1 - mais dans ce cas, vous auriez un type de contenu de application/soap+xml
.
Puisque votre client envoie text/xml
- n'importe quelle chance qu'ils attendent une interface REST? Ceci serait géré par la WCF webHttpBinding
.
En savoir plus sur REST dans WCF sur le MSDN WCF REST Developer Center ) et consultez la série de screencast Pluralsight sur WCF REST - hautement recommandé!
Généralement, lorsque nous recevons un message/une erreur dans un service Web qui comprend le texte:
content type 'text/xml'
Cela signifie que le serveur Web a renvoyé une page d'erreur au lieu de la réponse XML attendue.
J'ai eu exactement le même problème - la définition disait qu'il s'agissait de soap 1.2 mais attendait 1.1 car le type de contenu était différent.
J'ai constaté que si j'avais ajusté la configuration de mon serveur à partir de:
...
<endpoint address="" .../>
<Host>
<baseAddresses>
<add baseAddress="http://localhost:8001/services/fooService" />
</baseAddresses>
</Host>
...
À:
...
<endpoint address="fooService" .../>
<Host>
<baseAddresses>
<add baseAddress="http://localhost:8001/services" />
</baseAddresses>
</Host>
...
Le wsdl l'a exposé comme Soap 1.1 cette fois.