El servicio WCF SOAP 1.2 espera el tipo de contenido SOAP 1.1

Estoy creando un servicio web de WCF que requiere interoperabilidad con clientes que no son de WCF (de hecho, no habrá clientes de WCF).

Ya he escrito un WSDL usando SOAP 1.2 (según este ejemplo). He validado el WSDL y he usado este archivo (no el WSDL generado por WCF, que es superficialmente diferente) para crear unjabónUI proyecto de prueba

Tengo el requisito de que el servicio web sea compatible con SOAP 1.2, por lo que no puedo recurrir a SOAP 1.1 (que funcionó bien en un prototipo anterior).

he usadoWSCF.blue para generar mi servicio WCF, interfaz y clases de contrato de datos. Todo se compila muy bien y el punto final está expuesto si encuentro el servicio WCF en mi navegador. Todo parece bien con el mundo.

Cuando intento llamar a un método desde soapUi, recibo la siguiente respuesta del servidor (como se puede ver en soapUI):

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

(Los nombres de los métodos y los espacios de nombres reales se han cambiado manualmente para los fines de esta pregunta. Cualquier error tipográfico en el espacio de nombres no es un error en mi código, solo un descuido al escribir esta pregunta)

Sé que SOAP 1.1 especifica que el tipo de contenido debe sertexto / xml. SOAP 1.2 requiereaplicación / jabón + xml.

Mi solicitud en bruto (según soapUI):

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

A partir de esta respuesta, me dice que mi solicitud está formada correctamente: es una solicitud SOAP 1.2 con el tipo de contenido correcto. Sin embargo, mi servicio WCF no espera este tipo de contenido, lo que supongo significa que no lo he configurado correctamente y todavía cree que es un servicio web SOAP 1.1.

Web.config mínimo, segúnesta entrada de blog:

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

Un fragmento del contrato de servicio:

<code>[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);
}
</code>

Permití el seguimiento del servicio para mi servicio WCF y veo la siguiente excepción que parece confirmar mi hipótesis:

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

Por lo tanto, mi contrato y los enlaces de servicio probablemente no coincidan, si este mensaje es para creerlo, pero por lo que entiendo de WCF, mi configuración (o al menos la intención detrás de él) es correcta.

¿Alguien tiene alguna idea sobre qué está mal con mi configuración?

Respuestas a la pregunta(3)

Su respuesta a la pregunta