Compartir a través de


Especificar el cuerpo del mensaje para los adaptadores de WCF

Puede usar la pestaña Mensajes de los adaptadores WCF para especificar cómo se extrae el cuerpo del mensaje de BizTalk de un mensaje SOAP entrante y cómo se coloca el cuerpo del mensaje de BizTalk en un mensaje SOAP saliente.

Especificar cómo se extrae el cuerpo del mensaje de BizTalk de un mensaje SOAP entrante

Puede controlar cómo crear el cuerpo del mensaje de BizTalk entrante a partir de mensajes SOAP que llegan a través de los adaptadores de WCF. En las ilustraciones siguientes se muestran las pestañas Mensajes del adaptador de recepción WCF-NetNamedPipe y el adaptador de envío como ejemplos.

La pestaña Mensajes del adaptador de recepción wcf

La pestaña Mensajes de los adaptadores de envío de WCF

Para especificar cómo crear el cuerpo del mensaje de BizTalk, seleccione una de las siguientes opciones en la sección Cuerpo del mensaje de BizTalk entrante de las figuras anteriores:

  • Sobre- todo <soap:Envelope>. Usa el elemento Sobre SOAP de un mensaje entrante para crear la parte del cuerpo del mensaje de BizTalk. El mensaje entrante completo se convierte en el cuerpo del mensaje de BizTalk. Use esta opción para crear el cuerpo del mensaje de BizTalk incorporando todos los encabezados.

    Nota

    Los encabezados SOAP se colocan en el contexto del mensaje, pero no se promocionan automáticamente. La promoción se puede realizar en un componente de canalización personalizada.

  • Cuerpo: contenido del <elemento soap:Body>. Usa el contenido del elemento Cuerpo SOAP de un mensaje entrante para crear la parte del cuerpo del mensaje de BizTalk. Si el elemento Body tiene más de un elemento secundario, solo el primer elemento se convierte en la parte del cuerpo del mensaje de BizTalk.

  • Ruta de acceso: contenido ubicado por ruta de acceso del cuerpo. Usa la expresión de ruta de acceso del cuerpo en el cuadro de texto Expresión de ruta de acceso del cuerpo para crear la parte del cuerpo del mensaje de BizTalk. La expresión de ruta de acceso del cuerpo se evalúa con el elemento secundario inmediato del elemento Cuerpo SOAP de un mensaje entrante. Cuando los mensajes entrantes incluyen datos binarios, se puede usar esta opción para que el cuerpo del mensaje de BizTalk incluya únicamente los datos binarios sin etiquetas.

    Cuando se selecciona la opción Ruta de acceso: contenido ubicado por ruta de acceso del cuerpo , la propiedad de codificación Node se puede configurar para especificar el tipo de codificación esperado para el nodo especificado por la expresión de ruta de acceso del cuerpo en el cuadro de texto Expresión de ruta de acceso del cuerpo. Si la expresión de ruta de cuerpo coincide con más de un elemento, sólo se usa el primer elemento coincidente.

Nota

En el caso de la propiedad de expresión de ruta de acceso del cuerpo , solo se admiten las expresiones XPath adecuadas para el procesamiento de solo avance de XML. Para obtener más información sobre las expresiones XPath disponibles para esta propiedad, vea "The Best of Both Worlds: Combining XPath with the XmlReader" at https://go.microsoft.com/fwlink/?LinkID=75701.

Si se selecciona la opción Ruta de acceso: contenido ubicado por ruta de acceso del cuerpo y la propiedad Codificación del nodo se establece en String, los adaptadores wcF esperan que el nodo coincidente tenga datos de caracteres codificados UTF-8. Si los mensajes entrantes incluyen datos de caracteres de escape para los caracteres especiales XML como < y >, los adaptadores WCF restauran los datos de caracteres de escape al crear la parte del cuerpo del mensaje de BizTalk. Por ejemplo, si el nodo coincidente tiene datos de caracteres de escape como <FirstName>CONTOSO</FirstName> , los adaptadores wcF crean <FirstName>CONTOSO</FirstName> en el cuerpo del mensaje entrante de BizTalk.

Si se selecciona la opción Ruta de acceso: contenido ubicado por ruta de acceso del cuerpo y la propiedad Codificación del nodo se establece en Hexadecimal o Base64, el nodo coincidente puede tener una secuencia BinHex o Base64 válida. Si el nodo coincidente tiene una secuencia no válida, el cliente WCF recibe FaultException, se registra un mensaje de error en el registro de eventos en el equipo de BizTalk Server y no se suspende ningún mensaje.

Si se selecciona la opción Ruta de acceso: contenido ubicado por ruta de acceso del cuerpo y la propiedad Codificación de nodo se establece en XML, los adaptadores wcF crean el cuerpo del mensaje de BizTalk con el XML externo del nodo seleccionado por la expresión de ruta de acceso del cuerpo en el cuadro de texto Expresión de ruta de acceso del cuerpo.

Si el nodo coincidente no tiene datos codificados como se especifica en la propiedad de codificación Node , se crea un cuerpo de mensaje de BizTalk de entrada vacío.

Por ejemplo, suponga que los adaptadores de envío WCF reciben el mensaje de SOAP siguiente procedente de clientes de WCF:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/OrderRefresh</a:Action>
    <a:MessageID>urn:uuid:59e74507-66d0-4d50-be70-c3ec248b6f78</a:MessageID>
    <a:ReplyTo>
       <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessServiceBizTalk</a:To>
  </s:Header>
  <s:Body>
    <Order xmlns="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
     <OrderDetail>
       <CustomerID>CONTOSO</CustomerID>
       <OrderID>00000000</OrderID>
     </OrderDetail>
    </Order>
  </s:Body>
</s:Envelope>

Si configura la sección Cuerpo del mensaje entrante de BizTalk como se muestra en la tabla siguiente, el mensaje SOAP entrante anterior se convierte en la parte del cuerpo del mensaje entrante de BizTalk.

Cuerpo de mensaje entrante de BizTalk Expresión de ruta de cuerpo Codificación de nodo
Sobre :- todo <soap:Envelope> N/D N/D

Si configura la sección cuerpo del mensaje de BizTalk como se muestra en la tabla siguiente, los adaptadores WCF crean la parte del cuerpo del mensaje entrante de BizTalk para que contenga solo el elemento Order en el mensaje SOAP entrante anterior.

Cuerpo de mensaje entrante de BizTalk Expresión de ruta de cuerpo Codificación de nodo
Cuerpo: contenido del <elemento soap:Body> N/D N/D

Si configura la sección cuerpo del mensaje de BizTalk como se muestra en la tabla siguiente, los adaptadores WCF esperan que el nodo entrante que coincida con la expresión de ruta de acceso del cuerpo tendrá datos de caracteres codificados UTF-8.

Cuerpo de mensaje entrante de BizTalk Expresión de ruta de cuerpo Codificación de nodo
Ruta – contenido ubicado por la ruta del cuerpo /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] String

Para el mensaje SOAP entrante anterior, los adaptadores WCF usan los datos de caracteres, CONTOSO, del elemento CustomerID para crear la parte del cuerpo del mensaje de BizTalk entrante.

Nota

No puede usar la sintaxis abreviada de XPath, /Order/OrderDetail/CustomerID, para el mensaje SOAP entrante anterior. Esto se debe a que la sintaxis abreviada de XPath devuelve el nodo no declarado en un espacio de nombres y el elemento CustomerID del mensaje SOAP anterior se declara en el http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess espacio de nombres de forma predeterminada.

Si configura la sección cuerpo del mensaje de BizTalk como se muestra en la tabla siguiente, el elemento CustomID del mensaje SOAP entrante anterior debe tener una secuencia BinHex o Base64 válida.

Cuerpo de mensaje entrante de BizTalk Expresión de ruta de cuerpo Codificación de nodo
Ruta – contenido ubicado por la ruta del cuerpo /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] Hexadecimal o Base64

Si configura la sección cuerpo del mensaje de BizTalk como se muestra en la tabla siguiente, los adaptadores WCF crean el cuerpo del mensaje entrante de BizTalk para el mensaje SOAP entrante anterior, tal como se muestra en el código después de la tabla.

Cuerpo de mensaje entrante de BizTalk Expresión de ruta de cuerpo Codificación de nodo
Ruta – contenido ubicado por la ruta del cuerpo /*[local-name()='Order']/*[local-name()='OrderDetail']/*[local-name()='CustomerID'] XML
<CustomerID xmlns="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">CONTOSO</CustomerID>

Especificar el origen del cuerpo del mensaje WCF saliente

Puede controlar cómo crear el cuerpo del mensaje de BizTalk saliente a partir de mensajes WCF que llegan a través de los adaptadores de WCF. Para especificar cómo se coloca el cuerpo del mensaje de BizTalk en el cuerpo del mensaje WCF saliente, puede usar una de las siguientes opciones en la sección Cuerpo del mensaje WCF saliente de la pestaña Mensajes , como se muestra en las figuras de la sección anterior:

  • Cuerpo: cuerpo del mensaje de respuesta de BizTalk. Usa la parte del cuerpo del mensaje de BizTalk para crear el contenido del elemento Cuerpo SOAP para un mensaje saliente. El cuerpo del mensaje de BizTalk saliente se convierte en el cuerpo del mensaje SOAP saliente.

  • Plantilla: contenido especificado por la plantilla. Usa la plantilla proporcionada en el cuadro de texto XML para crear el contenido del elemento Cuerpo SOAP para un mensaje saliente. Los adaptadores WCF con cuerpo: el cuerpo del mensaje de respuesta de BizTalk (el valor predeterminado) no permiten enviar mensajes no XML, como datos de caracteres y imágenes de mapa de bits. Puede usar el contenido de plantilla especificado por la opción de plantilla para los adaptadores WCF para enviar mensajes no XML codificados en base64, hexadecimal o cadena.

    Cuando se selecciona la opción Plantilla: contenido especificado por plantilla , debe proporcionar un elemento XML de plantilla arbitrario en el cuadro de texto Outbound WCF message body - XML (Cuerpo del mensaje WCF saliente: XML ). El elemento XML de plantilla debe contener el siguiente elemento bts-msg-body una vez y solo una vez a menos que el elemento XML de plantilla quede vacío:

<bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="[base64|hex|string|xml]"/>

Los adaptadores WCF codifican el cuerpo del mensaje de BizTalk según el atributo de codificación de la plantilla XML y, a continuación, reemplazan el elemento bts-msg-body por el cuerpo del mensaje de BizTalk codificado al crear mensajes WCF salientes. Si el cuerpo del mensaje WCF saliente: el cuadro de texto XML se deja vacío, los adaptadores WCF codifican el cuerpo del mensaje de BizTalk en Base64 y, a continuación, colocan la secuencia Base64 en el cuerpo del mensaje SOAP de salida.

Si el atributo de codificación de la plantilla XML se establece en cadena, los adaptadores WCF codifican la parte del cuerpo del mensaje de BizTalk como datos de caracteres codificados UTF-8, en los que los caracteres especiales XML, como < y > , por ejemplo, son de escape.

Si el atributo de codificación de la plantilla XML se establece en base64 o hexadecimal, los adaptadores WCF codifican la parte del cuerpo del mensaje de BizTalk como una secuencia BinHex o Base64 .

Si el atributo de codificación de la plantilla XML se establece en xml, los adaptadores WCF reemplazan el elemento bts-msg-body por el cuerpo del mensaje saliente de BizTalk para crear el mensaje WCF saliente.

Por ejemplo, suponga que los adaptadores de WCF tienen que enviar la parte del cuerpo del mensaje de BizTalk siguiente a clientes de WCF:

<ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CONTOSO</ns0:CustomerID>
    <ns0:OrderID>01A2c</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>

Si configura la sección Cuerpo del mensaje WCF saliente como se muestra en la tabla siguiente, los adaptadores WCF crean los mensajes WCF salientes como se muestra en el código después de la tabla.

Cuerpo de mensaje saliente de WCF XML
Cuerpo – cuerpo de mensaje de respuesta de BizTalk N/D
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:6a706a54-c4f5-4767-909d-a992c7c26dba</a:MessageID>
    <a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessService</a:To>
  </s:Header>
  <s:Body>
    <ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CONTOSO</ns0:CustomerID>
    <ns0:OrderID>01A2c</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>
  </s:Body>
</s:Envelope>

Si configura la sección Cuerpo del mensaje WCF saliente como se muestra en la tabla siguiente, los adaptadores WCF crean los mensajes WCF salientes como se muestra en el código después de la tabla.

Cuerpo de mensaje saliente de WCF XML
Cuerpo – cuerpo de mensaje de respuesta de BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="string"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:05dde292-eedd-467e-b0d2-f1b8f0757410</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessService</a:To>
  </s:Header>
  <s:Body>
    <Book><ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">  <ns0:OrderDetail>    <ns0:CustomerID>CONTOSO</ns0:CustomerID>    <ns0:OrderID> 01A2c</ns0:OrderID>  </ns0:OrderDetail></ns0:Order>
    </Book>
  </s:Body>
</s:Envelope>

Si configura la sección Cuerpo del mensaje WCF saliente como se muestra en la tabla siguiente, los adaptadores wcF crean los mensajes WCF salientes, tal como se muestra en el código después de la tabla.

Cuerpo de mensaje saliente de WCF XML
Cuerpo – cuerpo de mensaje de respuesta de BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="base64"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://ww
w.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe
/OrderProcess/IOrderProcess/Request</a:Action>
    <a:MessageID>urn:uuid:cb3cac6d-a542-4a90-bad8-cdbfa8251112</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessSer
vice</a:To>
  </s:Header>
  <s:Body>
    <Book>77u/PG5zMDpPcmRlciB4bWxuczpuczA9Imh0dHA6Ly9NaWNyb3NvZnQuU2FtcGxlcy5CaX
pUYWxrLk5ldE5hbWVkUGlwZS9PcmRlclByb2Nlc3MiPg0KICA8bnMwOk9yZGVyRGV0YWlsPg0KICAgID
xuczA6Q3VzdG9tZXJJRD5DT05UT1NPPC9uczA6Q3VzdG9tZXJJRD4NCiAgICA8bnMwOk9yZGVySUQ+MD
FBMmM8L25zMDpPcmRlcklEPg0KICA8L25zMDpPcmRlckRldGFpbD4NCjwvbnMwOk9yZGVyPg==</Book
>
  </s:Body>
</s:Envelope>

Si configura la sección Cuerpo del mensaje WCF saliente como se muestra en la tabla siguiente, los adaptadores wcF crean los mensajes WCF salientes, tal como se muestra en el código después de la tabla.

Cuerpo de mensaje saliente de WCF XML
Cuerpo – cuerpo de mensaje de respuesta de BizTalk <Book><bts-msg-body xmlns="http://www.microsoft.com/schemas/bts2010" encoding="xml"/></Book>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
  <s:Header>
    <a:Action s:mustUnderstand="1">http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess/IOrderProcess/Request</a:A
ction>
    <a:MessageID>{513C123C-0600-4A1C-BEE2-EF83E0EFEB15}</a:MessageID>
    <a:ReplyTo>
      <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
    </a:ReplyTo>
    <a:To s:mustUnderstand="1">net.pipe://mycomputer/NetNamedPipeOrderProcessServiceBizTalk</a:To>
  </s:Header>
  <s:Body>
    <Book>
      <ns0:Order xmlns:ns0="http://Microsoft.Samples.BizTalk.NetNamedPipe/OrderProcess">
  <ns0:OrderDetail>
    <ns0:CustomerID>CustomerID_0</ns0:CustomerID>
    <ns0:OrderID>OrderID_0</ns0:OrderID>
  </ns0:OrderDetail>
</ns0:Order>
    </Book>
  </s:Body>
</s:Envelope>