Condividi tramite


Invio di un messaggio AS2 attraverso una porta di trasmissione FILE

I messaggi AS2 vengono in genere inviati tramite un adapter HTTP. È tuttavia possibile inviare messaggi AS2 con un adapter FILE se si creano componenti personalizzati. In questo argomento verrà descritto il funzionamento di questa soluzione con il relativo codice di esempio.

Quando i messaggi AS2 vengono inviati tramite HTTP, il codificatore AS2 nella pipeline di trasmissione popola la proprietà di contesto HTTP.UserHttpHeaders con le intestazioni HTTP (e AS2) necessarie per l'invio del messaggio. Tali intestazioni vengono ottenute dalla proprietà di contesto HTTP.UserHttpHeaders esistente, da proprietà di contesto distinte o dalle proprietà dell'accordo, in base all'ordine indicato. L'adapter HTTP della porta di trasmissione scriverà le intestazioni nel messaggio e invierà il messaggio tramite HTTP.

Se si utilizza un adapter FILE anziché un adapter HTTP nella porta di trasmissione, i valori delle intestazioni nella proprietà di contesto HTTP.UserHttpHeaders non verranno scritti nel messaggio. È necessario creare un componente personalizzato della pipeline per anteporre le intestazioni in HTTP.UserHttpHeaders al messaggio. Il messaggio può quindi essere rilasciato in una cartella dall'adapter FILE. Si tratterà di un messaggio AS2 che include le intestazioni HTTP necessarie.

Potrebbe inoltre essere necessario creare un componente personalizzato per garantire che tutte le intestazioni AS2 vengano incluse nella proprietà di contesto HTTP.UserHttpHeaders. È possibile creare un'orchestrazione personalizzata o un componente personalizzato della pipeline prima del codificatore AS2, per impostare le proprietà di contesto utilizzate dal codificatore AS2 per compilare HTTP.UserHttpHeaders.

Scrittura delle intestazioni in un messaggio AS2

Per generare un messaggio AS2 tramite un adapter FILE anziché tramite un adapter HTTP, è necessario aggiungere un componente personalizzato della pipeline dopo il codificatore AS2 in una pipeline di trasmissione AS2 personalizzata. Includere il codice nel componente personalizzato della pipeline che scrive le intestazioni dalla proprietà di contesto HTTP.UserHttpHeaders al messaggio. Nel codice di esempio seguente viene illustrata questa operazione:

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;  
        }  

Innalzamento di livello delle proprietà di contesto delle intestazioni AS2

È possibile alzare di livello le proprietà delle intestazioni AS2 nel contesto di un messaggio tramite un'orchestrazione personalizzata o un componente personalizzato della pipeline.

Per alzare di livello le proprietà delle intestazioni AS2 tramite un componente personalizzato della pipeline, aggiungere il componente prima del codificatore AS2 in una pipeline di trasmissione AS2 personalizzata. È possibile utilizzare il codice di esempio sopra riportato per scrivere le intestazioni da HTTP.UserHttpHeaders al messaggio, sostituendo tuttavia il metodo Read con un metodo Promote, specificando il nome, il valore e lo spazio dei nomi della proprietà di contesto da alzare di livello.

Per alzare di livello le proprietà delle intestazioni AS2 tramite un'orchestrazione personalizzata, creare un'orchestrazione con una porta di ricezione FILE, una forma Costruisci messaggio e una porta di trasmissione FILE. Aggiungere del codice alla forma Costruisci messaggio per impostare le proprietà alzate di livello contenenti le intestazioni AS2. È necessario aggiungere un riferimento a Microsoft.BizTalk.HttpTransport.dll nell'orchestrazione personalizzata.

Lo spazio dei nomi per le intestazioni HTTP è http://schemas.microsoft.com/BizTalk/2003/http-properties per le intestazioni HTTP non AS2 e http://schemas.microsoft.com/BizTalk/2003/as2-properties per le intestazioni AS2.

Nel codice di esempio seguente viene illustrato come alzare di livello le proprietà delle intestazioni AS2 nella forma Costruisci messaggio di un'orchestrazione. Questo codice alza di livello le intestazioni AS2 per 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";  

Vedere anche

Sviluppo e configurazione di soluzioni AS2 BizTalk Server