Hay veces cuando se importa un servicio web o WCF en el puerto ya venga el Soap Fault, para los casos en que este no venga se debe seguir los siguientes pasos;
Ir a orchestration view, hacer clic en “Type”, luego en “Port Type”
Se selecciona el puerto y la operación del servicio web que se desea agregar el mensaje de Soap Fault, paso a seguir se hace clic derecho y se selecciona la opción “New Fault Message”
Después de haber realizado el paso anterior se adiciona el fault message,
Se modifica el nombre del mensaje, y se va a la propiedad “MessageType” y se selecciona “schemas”
Luego se selecciona la opción “<select from referenced assembly … >”
Posteriormente aparece una ventana emergente con los esquemas que están en las referencias del proyecto, se hace clic en la referencia “Microsoft.Biztalk.GlobalPropertySchemas” y se busca el esquema Fault.
Este mensaje de Fault tiene dos versiones la 1.1 y la 1.2. Si no se tiene identificado que versión es la que nos devuelve el mensaje de Soap Fault se deben adicionar los dos mensajes. Para este ejemplo se seleccionara la versión 1.1
Después Se hace clic derecho sobre el scope en el que está el receive que tiene la respuesta del servicio web o WCF
En el catch que se generó se modifica el nombre con la propiedad “Name” y se asigna el nombre del objeto con la propiedad “Exception Object Name”.
Luego se va a la propiedad “Exception Object Type” y se selecciona el mensaje que se creó del soap Fault.
Después se selecciona el puerto del servicio web o del WCF para modificar la propiedad “Delivery Notification” con el valor “Transmitted”.
La estructura del SoapFault es
Para obtener los datos del error que vienen del SoapFault, se puede hacer de dos formas:
Por medio de un mapa donde el origen sea el SoapFault y el destino el esquema personalizado que se tenga en la aplicación para reportar errores
La otra opción es con XPATH
Se obtiene el valor “FaultCode” del SoapFault
sXPath=”string(/*[local-name()=’Fault’ and namespace-uri()=’http://schemas.xmlsoap.org/soap/envelope/’]/*[local-name()=’faultcode’ and namespace-uri()=”]/text())”;
sCodeSoapFault=System.Convert.ToString(xpath(SoapFaultException.Fault,sXPath));
Se obtiene el valor “FaultString”del SoapFault
sXPath=”string(/*[local-name()=’Fault’ and namespace-uri()=’http://schemas.xmlsoap.org/soap/envelope/’]/*[local-name()=’faultstring’ and namespace-uri()=”]/text())”;
sErrorSoapFault=System.Convert.ToString(xpath(SoapFaultException.Fault,sXPath));
Leave a Reply