Topic
  • 2 replies
  • Latest Post - ‏2014-02-25T17:24:01Z by 794A_Ricardo_Gonzalez
Magnani
Magnani
1 Post

Pinned topic Problems to call Web Services with SOAP 1.2 through SOAPRequest [Code]

‏2013-09-23T16:12:48Z |

Hi,

I'm trying to access a Web Services (WCF) through SOAPRequest node and is generating the Fault Exception "The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver.  Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None).".

My Flow is SOAPInput -> Compute Node -> SOAPRequest -> SOAPReply. I'm using Compute node because I put de SOAP version and others attributes in Context.

I think the problem is the SOAP Action, because he did not put in the Content-Type, when I run the SOAP UI works and the only difference seems to be the SOAPAction. Has anyone had this problem?

Information obtained from TCPMon:

SOAP UI:

POST /Gmi3/EnvioEmailService.svc HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="http://tempuri.org/IEnvioEmailService/EnviarEmailCompleto"
Content-Length: 1226
Host: hostname:9898
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

SOAPRequest:

POST /Gmi3/EnvioEmailService.svc HTTP/1.1
Content-Length: 389
Content-Type: application/soap+xml; charset=utf-8
Host: hostname:9898
SOAPAction: "http://tempuri.org/IEnvioEmailService/EnviarEmailCompleto"
Connection: Keep-Alive

The information below (simple sample):

Code - Compute Node

CREATE FUNCTION Main() RETURNS BOOLEAN

BEGIN

                SET OutputRoot.SOAP.Context.Namespace.(SOAP.NamespaceDecl)xmlns:soap12 = soap;

                SET OutputRoot.SOAP.Context.Namespace.(SOAP.NamespaceDecl)xmlns:tem = tem;

                SET OutputRoot.SOAP.Context.SOAP_Version = '1.2';

                --SET OutputRoot.SOAP.Context."Content-Type" = 'application/soap+xml; charset=utf-8; action="http://tempuri.org/IEnvioEmailService/EnviarEmailCompleto';

                SET OutputRoot.SOAP.Context."Content-Type" = 'application/soap+xml; charset=utf-8';

                SET OutputRoot.SOAP.Body.tem:EnviarEmail.tem:emailDestino = InputRoot.XMLNSC.*.Destino;

                SET OutputRoot.SOAP.Body.tem:EnviarEmail.tem:assuntoEmail = InputRoot.XMLNSC.*.Assunto;

                SET OutputRoot.SOAP.Body.tem:EnviarEmail.tem:corpoMensagem = InputRoot.XMLNSC.*.Mensagem;

                IF InputRoot.XMLNSC.*.Formato = 'HTML' THEN

                                SET OutputRoot.SOAP.Body.tem:EnviarEmail.tem:html = 1;

                ELSE

                                SET OutputRoot.SOAP.Body.tem:EnviarEmail.tem:html = 0;

                END IF;

               RETURN TRUE;

END;

Tks.
Magnani

Updated on 2013-09-23T17:34:50Z at 2013-09-23T17:34:50Z by Magnani
  • fjb_saper
    fjb_saper
    125 Posts

    Re: Problems to call Web Services with SOAP 1.2 through SOAPRequest [Code]

    ‏2013-10-07T03:48:49Z  

    Look up the documentation for the SOAP node. You may have to specify the SOAP Action in the environmental override. But you are right you have to specify the soap action. You did not specify how the SOAP node was built. Does it reference a deployable wsdl? Does the wsdl have the SOAP action in its bindings?

  • 794A_Ricardo_Gonzalez
    1 Post

    Re: Problems to call Web Services with SOAP 1.2 through SOAPRequest [Code]

    ‏2014-02-25T17:24:01Z  

    Just add the HTTPRequestHeader in the Message Assembly headers and one of the properties is SOAPAction.  HTTPRequestHeader is a sibling of LocalEnvironment.

    I did it in a mapping node, pretty easy.. You should have no problems doing it in the ESQL.

     

    Cheers.