Compartir a través de


Envío de un mensaje AS2 a través de un puerto de envío de archivos

Normalmente, los mensajes AS2 se envían a través de un adaptador HTTP. Sin embargo, puede enviar mensajes AS2 a través de un adaptador de archivos si crea componentes personalizados. En este tema se describe cómo funcionaría dicha solución y se proporciona código de ejemplo para la solución.

Cuando se envían mensajes AS2 a través de HTTP, el codificador AS2 de la canalización de envío rellena la HTTP.UserHttpHeaders propiedad de contexto con los encabezados HTTP (y AS2) necesarios para enviar el mensaje. Toma estos encabezados de la propiedad de contexto existente HTTP.UserHttpHeaders, de propiedades de contexto independientes o de propiedades de acuerdo (siguiendo ese orden de precedencia). El adaptador HTTP del puerto de envío escribirá los encabezados en el mensaje y enviará el mensaje a través de HTTP.

Si usa un adaptador FILE en lugar de un adaptador HTTP en el puerto de envío, los valores de encabezado de la HTTP.UserHttpHeaders propiedad context no se escribirán en el mensaje. Debe crear un componente de canalización personalizado para anteponer al mensaje los encabezados en HTTP.UserHttpHeaders. Después, el adaptador de ARCHIVO puede colocar el mensaje en una carpeta como un mensaje AS2 que incluye los encabezados HTTP necesarios.

También es posible que tenga que crear un componente personalizado para asegurarse de que todos los encabezados AS2 se incluyen en la HTTP.UserHttpHeaders propiedad de contexto. Puede crear una orquestación personalizada o un componente de canalización personalizado antes del AS2Encoder, para establecer las propiedades de contexto que usa el AS2Encoder para compilar HTTP.UserHttpHeaders.

Escribir encabezados en un mensaje AS2

Para generar un mensaje AS2 mediante un adaptador de ARCHIVO, en lugar de un adaptador HTTP, agregue un componente de canalización personalizado después del codificador AS2 en una canalización de envío AS2 personalizada. Incluya código en el componente de canalización personalizado que escriba los encabezados de la HTTP.UserHttpHeaders propiedad de contexto en el mensaje. Un ejemplo es el código de ejemplo siguiente:

public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)  
        {  
            IPipelineContext pipelineContext = pContext;  
            IBaseMessage baseMessage = pInMsg;  
  
            //Prepend Headers  
            MemoryStream ms = new MemoryStream();  
            string strName = "UserHttpHeaders";  
            string strValue = (string)baseMessage.Context.Read(strName,  
              "http://schemas.microsoft.com/BizTalk/2003/  
              http-properties");  
  
            //Leave an empty line between the headers and the body  
            strValue += "\r\n";  
            ms.Write(Encoding.ASCII.GetBytes(strValue), 0,   
               Encoding.ASCII.GetByteCount(strValue));  
  
            //Append Body  
            Stream sr = baseMessage.BodyPart.Data;  
  
            //Read the body of the message and append it to the memory   
              stream containing the headers  
            int size = 1024;  
            byte[] buffer = new byte[size];  
            while (0 != (size = sr.Read(buffer, 0, buffer.Length)))  
            {  
                ms.Write(buffer, 0, size);  
            }  
  
            //Set the body of the message to the new memory stream  
            baseMessage.BodyPart.Data = ms;  
  
            //Rewind the stream  
            ms.Seek(0, SeekOrigin.Begin);  
  
            return baseMessage;  
        }  

Promoción de las propiedades de contexto del encabezado AS2

Puede promover las propiedades del encabezado AS2 en el contexto de un mensaje mediante una orquestación personalizada o un componente de canalización personalizado.

Para promover las propiedades del encabezado AS2 mediante un componente de canalización personalizado, agregue un componente de canalización personalizado antes del componente codificador AS2 en una canalización de envío de AS2 personalizada. Puede usar código del código de ejemplo mostrado anteriormente para escribir encabezados desde HTTP.UserHttpHeaders en el mensaje, con la excepción de que reemplazaría el método Read por un método Promote, proporcionando el nombre, el valor y el espacio de nombres de la propiedad de contexto que se va a promover.

Para promover propiedades de encabezado AS2 mediante una orquestación personalizada, cree una orquestación con un puerto de recepción FILE, un shape de construcción de mensaje, y un puerto de envío FILE. En el componente Construir mensaje, agregue el código que establece las propiedades promocionadas que contienen los encabezados AS2. Debe agregar una referencia a Microsoft.BizTalk.HttpTransport.dll en la orquestación personalizada.

Los espacios de nombres para los encabezados HTTP son http://schemas.microsoft.com/BizTalk/2003/http-properties para encabezados HTTP que no son AS2 y http://schemas.microsoft.com/BizTalk/2003/as2-properties para encabezados AS2.

El siguiente código de ejemplo muestra cómo promover propiedades del encabezado AS2 en la estructura de construcción del mensaje de una orquestación. Este código promueve los encabezados AS2 para una MDN.

Message_2=new System.Xml.XmlDocument();  
Message_2=Message_1;  
Message_2(EdiIntAS.IsAS2PayloadMessage)=false;  
Message_2(EdiIntAS.IsAS2AsynchronousMdn)=true;  
Message_2(EdiIntAS.IsAS2MdnResponseMessage)=true;  
Message_2(EdiIntAS.SendMDN)=true;  
Message_2(EdiIntAS.IsAS2MessageSigned)=false;  
Message_2(EdiIntAS.AS2To)="Party1";  
Message_2(EdiIntAS.AS2From)="Home";  
Message_2(EdiIntAS.MessageId)="123456";  
Message_2(EdiIntAS.OriginalMessageId)="2123456";  
Message_2(HTTP.UserHttpHeaders)="Message1-Id: xyz\r\nMyHeader: MyValue";  

Véase también

Desarrollo y Configuración de Soluciones AS2 de BizTalk Server