Switzerland's Citroen replica watches uk, although very good, but in replica watches popularity and Tissot is rolex replica immeasurably, but in fact it and Tissot belong to the rolex replica uk same Swatch Group, its positioning higher than the Tissot, lower than Hamilton.
SOAPUI: Error consumiendo un servicio WCF « josemiguel.torres

SOAPUI: Error consumiendo un servicio WCF


Para los que no la conozcáis, SoapUI es una herramienta que se utiliza típicamente para el test de servicios Web y brilla por su alta versatilidad en cualquier tipo de plataforma y protocolos. Desarrollada en Java y OpenSource (aunque tiene una versión Pro de paganini), la utilizo para el test de comportamiento y de carga dado un WSDL.

En este post pretendo mostrar un par de “errores” típicos de SoapUI cuando testeamos un servicio WCF, en mi caso WCF 4.0.

“The message could not be processed” con wsHttpBinding

El primer error da como resultado de hacer un Request al método expuesto Method del servicio IService y es el siguiente:

   1: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
   2:    <s:Header>
   3:       <a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
   4:    </s:Header>
   5:    <s:Body>
   6:       <s:Fault>
   7:          <s:Code>
   8:             <s:Value>s:Sender</s:Value>
   9:             <s:Subcode>
  10:                <s:Value xmlns:a="http://schemas.xmlsoap.org/ws/2005/02/sc">a:BadContextToken</s:Value>
  11:             </s:Subcode>
  12:          </s:Code>
  13:          <s:Reason>
  14:             <s:Text xml:lang="es-ES">The message could not be processed. This is most likely because the action 
  15: 'http://tempuri.org/IService/Method' is incorrect or because the message contains an invalid or 
  16: expired security context token or because there is a mismatch between bindings. The security context token would 
  17: be invalid if the service aborted the channel due to inactivity. To prevent the service from aborting idle sessions 
  18: prematurely increase the Receive timeout on the service endpoint's binding.</s:Text>
  19:          </s:Reason>
  20:       </s:Fault>
  21:    </s:Body>
  22: </s:Envelope>

 
El error se produce puesto que el enlace wsHttpBinding implementa de forma nativa el security context token, el cual no está soportado por SoapUI. De este modo si modificamos el web.config del servicio indicandole de forma explícita que no haga uso del mismo solucionaremos el problema.
 
   1: <bindings>
   2:   <wsHttpBinding>
   3:     <binding name="wsHttpBindingConfig">
   4:       <security mode="None">
   5:         <transport clientCredentialType="None" />
   6:         <message establishSecurityContext="false" />
   7:       </security>
   8:     </binding>
   9:   </wsHttpBinding>
  10: </bindings>

 

Consideraciones con el WS-Addressing

Otro de los quebraderos de cabeza es si tenemos habilitado el WS-Addressing. En este caso el header del mensaje únicamente contiene el valor de Action (no el To)con lo que al ejecutar el Request desde SoapUI nos encontramos con el siguiente error.

   1: <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
   2:    <s:Header>
   3:       <a:Action s:mustUnderstand="1">http://www.w3.org/2005/08/addressing/soap/fault</a:Action>
   4:    </s:Header>
   5:    <s:Body>
   6:       <s:Fault>
   7:          <s:Code>
   8:             <s:Value>s:Sender</s:Value>
   9:             <s:Subcode>
  10:                <s:Value>a:DestinationUnreachable</s:Value>
  11:             </s:Subcode>
  12:          </s:Code>
  13:          <s:Reason>
  14:             <s:Text xml:lang="es-ES">The message with To '' cannot be processed at the receiver, due to 
  15: an AddressFilter mismatch at the EndpointDispatcher.  Check that the sender and receiver's EndpointAddresses agree.</s:Text>
  16:          </s:Reason>
  17:       </s:Fault>
  18:    </s:Body>
  19: </s:Envelope>


Si nos dirigimos al apartado de WS-A Setting desde el “Request 1” en cuestión se desplegará las diferentes opciones habilitadas. Una de ellas está desactivada por defecto y es precisamente la que hace referencia a wsa:to, podemos seleccionar “Add default wsa:to” (como he hecho yo en este ejemplo) mediante el check correspondiente o bien podemos añadir directamente la dirección del servicio hospedado.

image

Espero que sea de utilidad.

,

Comments are closed.