Compartir a través de


Enviar un mensaje AS2 a través de un puerto de envío de archivo

Los mensajes AS2 suelen enviarse a través de un adaptador de HTTP. No obstante, puede enviar mensajes AS2 a través de un adaptador de archivo si crea componentes personalizados. En este tema se describe cómo funcionaría esta solución y ofrece códigos de ejemplo para ella.

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 (en 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 de contexto no se escribirán en el mensaje. Debe crear un componente de canalización personalizado para anteponer los encabezados al HTTP.UserHttpHeaders mensaje. A continuación, el adaptador de archivo puede colocar el mensaje en una carpeta y será un mensaje AS2 que incluya los encabezados HTTP necesarios.

También puede 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 de AS2Encoder, para establecer las propiedades de contexto que usa el codificador AS2 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 de 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 escribe 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;  
        }  

Promocionar propiedades de contexto de encabezado AS2

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

Para promocionar propiedades de encabezado AS2 mediante un componente de canalización personalizado, agregue un componente de canalización personalizado antes del codificador AS2 en una canalización de envío AS2 personalizada. Puede usar código del código de ejemplo anterior 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 promocionar las propiedades de encabezado AS2 mediante una orquestación personalizada, cree una orquestación con un puerto de recepción de archivos, una forma Construir mensaje y un puerto de envío de archivos. Agregue el código que establece las propiedades promocionadas que contienen los encabezados AS2 a la forma Construir mensaje. Debe agregar una referencia a Microsoft.BizTalk.HttpTransport.dll en la orquestación personalizada.

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

El siguiente código de ejemplo muestra cómo promocionar propiedades de encabezados AS2 en la forma Contruir mensaje de una orquestación. Este código promociona encabezados AS2 para un 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";  

Consulte también

Desarrollo y configuración de soluciones AS2 de BizTalk Server