WCF SOAP 1.2 service attend SOAP 1.1 type de contenu

Je suis en train de construire un service web WCF qui nécessite l'interopérabilité avec les non-WCF clients (en fait, il n'y aura pas de WCF clients).

J'ai déjà écrit une WSDL à l'aide de SOAP 1.2 (par cet exemple). J'ai validé le WSDL et ont utilisé ce fichier (pas le WSDL généré par la WCF, qui est superficiellement différents) pour créer un soapUI projet de test.

J'ai une exigence que le service web de support de SOAP 1.2, donc je ne peux pas tout simplement tomber en arrière pour SOAP 1.1 (qui a très bien fonctionné dans un prototype).

J'ai utilisé La FUACE.bleu pour générer mon service WCF, de l'interface et des données contrat de classes. Tout compile bien et le point de terminaison est exposée si j'ai frappé le service WCF dans mon navigateur. Tout semble bien avec le monde.

Quand j'essaie d'appeler une méthode de soapUi je reçois la réponse suivante à partir du serveur (comme visible à partir de soapUI):

HTTP/1.1 415 Cannot process the message because the content type 
'application/soap+xml;charset=UTF-8;action="http://tempuri.org/FetchMyThing"' 
was not the expected type 'text/xml; charset=utf-8'.
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon, 30 Apr 2012 08:15:29 GMT
Content-Length: 0

(Méthode des noms et des espaces de noms ont été modifiés manuellement pour les fins de cette question. Les fautes de frappe dans l'espace de noms ne sont pas des erreurs dans mon code, juste une erreur de frappe à cette question)

Je sais que SOAP 1.1 indique que le type de contenu doit être text/xml. SOAP 1.2 nécessite application/soap+xml.

Ma demande brute (comme par soapUI):

POST http://localhost/MyWs.svc HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="http://tempuri.org/FetchMyThing"

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
               xmlns:ns="http://tempuri.org">
   <soap:Header/>
   <soap:Body>
      <ns:fetchMyThingRequest attribute1="1" attribute2="10">
      </ns:fetchMyThingRequest>
   </soap:Body>
</soap:Envelope>

De cette réponse, il me dit que ma demande est formée correctement - c'est un SOAP 1.2 la demande avec le bon type de contenu. Mon service WCF, cependant, ne s'attend pas à ce type de contenu, ce qui je suppose signifie que je n'ai pas configuré correctement et elle pense toujours que c'est un SOAP 1.1 service web.

Minimale Web.config, comme par ce blog:

<system.serviceModel>
  <services>
    <service name="MyNamespace.MyPort">
      <endpoint address="" binding="customBinding" bindingConfiguration="httpSoap12" contract="IWsPort12" />
    </service>
  </services>

  <bindings>
    <customBinding>
      <binding name="httpSoap12">
        <textMessageEncoding messageVersion="Soap12" />
        <httpTransport />
      </binding>
    </customBinding>
  </bindings>
</system.serviceModel>

Un extrait du contrat de service:

[ServiceContract(Namespace = "http://tempuri.org")]
public interface IWsPort
{
  [OperationContract(Action = "http://tempuri.org/FetchMyThing")]
  [FaultContract(typeof(WsFault), Action = "http://tempuri.org/FetchMyThing", Name = "fetchMyThingFault")]
  [XmlSerializerFormat(SupportFaults = true)]
  FetchMyThingResponse FetchMyThing(FetchMyThingRequest request);
}

J'ai activé le service de suivi pour mon service WCF et de voir l'exception de ce qui semble confirmer mon hypothèse:

Activity: Listen at 'http://mycomputer/MyWs.svc
<Exception>
  <ExceptionType>System.ServiceModel.ProtocolException, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType>
  <Message>Content Type application/soap+xml;charset=UTF-8;action="http://tempuri.org/FetchMyThing" was sent to a service expecting text/xml; charset=utf-8.  The client and service bindings may be mismatched.   
  </Message>
(erroneous detail snipped)
</Exception>

Donc, mon contrat et des liaisons de service sont probablement incompatibles, si ce message est cru, mais ce que je comprends de la WCF ma configuration (ou au moins l'intention derrière elle) est correcte.

Quelqu'un a une idée de quel est le problème avec ma configuration?

InformationsquelleAutor Stefan Mohr | 2012-05-01