Compartir vía


Encabezados SOAP con servicios WCF publicados

Los adaptadores de recepción de WCF pueden copiar todos los valores de encabezado SOAP de los mensajes entrantes en la propiedad InboundHeaders , o pueden escribir o promover valores especificados en el contexto del mensaje de BizTalk. Los adaptadores pueden funcionar con los encabezados SOAP personalizados y los encabezados SOAP estándar que utiliza la infraestructura de WCF, por ejemplo, WS-Addressing, WS-Security y WS-AtomicTransaction. La propiedad de contexto InboundHeaders está en el espacio de nombres http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-propertiesde destino y contiene representaciones de cadena de los valores de encabezado SOAP en los mensajes entrantes.

Nota

Si va a promover los valores del encabezado SOAP que ha especificado, debe haber un esquema de propiedades implementado en el proyecto de BizTalk que corresponda a los valores que se van a promover.

Nota

Las propiedades promocionadas no pueden ser superiores a 256 caracteres.

Los siguientes datos XML muestran un ejemplo de la representación de cadena de los encabezados SOAP para la propiedad InboundHeaders . Esto se recibe desde el cliente y se envía a la ubicación de recepción de BizTalk.

<headers>
<a:Action s:mustUnderstand="1" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">Operation_1</a:Action>
<SalesAgent xmlns="Microsoft.Samples.BizTalk.WCF.CustomSoapHeaderPipeline">Contoso</SalesAgent>
<a:MessageID xmlns:a="http://www.w3.org/2005/08/addressing">urn:uuid:26e6720f-5a82-4ef2-b597-6ef077bab92e</a:MessageID>
<a:ReplyTo xmlns:a="http://www.w3.org/2005/08/addressing"><a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address></a:ReplyTo>
<a:To s:mustUnderstand="1" xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">net.tcp://localhost:9990/NetTcpOrderProcess</a:To>
</headers>

Para escribir o promover los valores del encabezado SOAP en el contexto del mensaje de BizTalk, es necesario colocar una colección de parejas de valores que se componen del nombre de propiedad y de espacio de nombres en el mensaje WCF, de modo que los adaptadores de WCF reconocerán que los valores de encabezado se deben escribir o promover. Un adaptador de WCF espera las siguientes propiedades del mensaje en los mensajes de WCF para escribir o promover los valores del encabezado SOAP en el contexto del mensaje de BizTalk:

  • Para promover los valores de encabezado SOAP al contexto del mensaje de BizTalk, los adaptadores WCF buscan el par de clave http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote y valor List<KeyValuePair<XmlQualifiedName, object>>.

    Con este par, los adaptadores WCF toman el espacio de nombres, el nombre y el valor del objeto XmlQualifiedName y los usan para promover los valores de encabezado.

  • Para escribir pero no promover los valores del encabezado SOAP al contexto del mensaje de BizTalk, los adaptadores WCF buscan el par de clave http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext y valor List<KeyValuePair<XmlQualifiedName, object>>.

    Con esta pareja, los adaptadores de WCF escriben los valores en el contexto del mensaje.

    El siguiente código muestra cómo escribir o promover los valores del encabezado SOAP en el contexto del mensaje de BizTalk:

const string PropertiesToPromoteKey="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/Promote";
const string PropertiesToWriteKey="http://schemas.microsoft.com/BizTalk/2006/01/Adapters/WCF-properties/WriteToContext";

XmlQualifiedName PropName1=new XmlQualifiedName("Destination", "http://tempuri.org/2007/sample-properties");
XmlQualifiedName PropName2=new XmlQualifiedName("Source", "http://tempuri.org/2007/sample-properties");

//Create a List of KeyValuePairs that indicate properties to be promoted to BizTalk message context.
//A Property Schema must be deployed and string values have a limit of 256 characters
List<KeyValuePair<XmlQualifiedName, object>> promoteProps=new List<KeyValuePair<XmlQualifiedName, object>>();
promoteProps.Add(new KeyValuePair<XmlQualifiedName, object>(PropName1, "Property value"));
wcfMessage.Properties[PropertiesToPromoteKey]=promoteProps;

//Create a List of KeyValuePairs that indicate properties to be written to BizTalk message context
List<KeyValuePair<XmlQualifiedName, object>> writeProps=new List<KeyValuePair<XmlQualifiedName, object>>();
writeProps.Add(new KeyValuePair<XmlQualifiedName, object>(PropName2, "Property value"));
wcfMessage.Properties[PropertiesToWriteKey]=writeProps;

El Asistente para publicación de Servicio WCF de BizTalk no incluye definiciones de encabezado SOAP personalizadas en los metadatos generados. Para publicar los metadatos de los servicios WCF con encabezados SOAP personalizados, debe crear de forma manual un archivo de Lenguaje de descripción de servicios Web (WSDL). Puede usar el atributo externalMetadataLocation del <elemento serviceMetadata> en el archivo Web.config que genera el asistente para especificar la ubicación del archivo WSDL. El archivo WSDL se devuelve al usuario en respuesta a las solicitudes de intercambio de metadatos (MEX) WSDL en lugar de WSDL generado de forma automática.

Los siguientes datos XML muestran un ejemplo de una parte del archivo WSDL que define los encabezados SOAP personalizados:

<wsdl:operation name="Request">
  <soap12:operation soapAction="http://Microsoft.Samples.BizTalk.NetTcpAdapter/OrderProcess/IOrderProcess/Request" style="document" />
   <wsdl:input name="Order">
     <soap12:header message="i0:Order_Headers" part="SalesAgent" use="literal" />
     <soap12:body use="literal" />
   </wsdl:input>
   <wsdl:output name="OrderConfirmation">
     <soap12:header message="i0:OrderConfirmation_Headers" part="PaymentAgent" use="literal" />
     <soap12:body use="literal" />
   </wsdl:output>
</wsdl:operation>

En esta sección

Consulte también

Esquema de propiedades y encabezados SOAP de adaptadores de WCF con servicios WCF consumidos