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