共用方式為


透過 FILE 傳送埠傳送 AS2 訊息

AS2 訊息通常會透過 HTTP 配接器傳送。 然而,如果建立自訂元件,也可以透過 FILE 配接器傳送 AS2 訊息。 本主題說明這類解決方案的運作方式,並提供該解決方案的範例程式碼。

當 AS2 訊息透過 HTTP 傳送時,傳送管線中的 AS2 編碼器會使用傳送訊息所需的 HTTP (和 AS2) 標頭填入 HTTP.UserHttpHeaders 內容屬性。 它會依優先順序) ,從現有的 HTTP.UserHttpHeaders 內容屬性、個別內容屬性,或從合約屬性取用這些標頭 (。 傳送埠內的 HTTP 配接器會將標頭寫入訊息,並透過 HTTP 傳送訊息。

如果您使用 FILE 配接器,而不是傳送埠中的 HTTP 配接器,內容屬性中的 HTTP.UserHttpHeaders 標頭值將不會寫入訊息。 您必須建立自訂管線元件,以在 中的 HTTP.UserHttpHeaders 標頭前面加上訊息。 這樣一來訊息就可以由 FILE 配接器放入資料夾,並成為內含必要 HTTP 標頭的 AS2 訊息。

您可能也需要建立自訂群組件,以確保所有 AS2 標頭都包含在內容屬性中 HTTP.UserHttpHeaders 。 您可以在 AS2Encoder 之前建立自訂協調流程或自訂管線元件,以設定 AS2 Encoder 用來建置 HTTP.UserHttpHeaders 的內容屬性。

將標頭寫入 AS2 訊息

若要使用 FILE 配接器產生 AS2 訊息,而不使用 HTTP 配接器,請在自訂的 AS2 傳送管線中的 AS2 編碼器之後新增自訂管線元件。 將標頭從內容屬性寫入訊息的 HTTP.UserHttpHeaders 自訂管線元件中包含程式碼。 範例如下列程式碼所示:

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

升級 AS2 標頭內容屬性

您可以使用自訂協調流程或自訂管線元件,將 AS2 標頭屬性升級為訊息內容。

若要使用自訂管線元件升級 AS2 標頭屬性,請在自訂的 AS2 傳送管線中的 AS2 編碼器之前新增自訂管線元件。 您可以使用上述範例程式碼中的程式碼,將標頭從 HTTP.UserHttpHeaders 寫入訊息,但例外狀況是您將 Read 方法取代為 Promote 方法,並提供要升階之內容屬性的名稱、值和命名空間。

若要使用自訂協調流程升級 AS2 標頭屬性,請建立具有 FILE 接收埠、「建構訊息」圖形和 FILE 傳送埠的協調流程。 針對「建構訊息」圖形,新增設定含 AS2 標頭升級屬性的程式碼。 您必須在自訂協調流程中加入 的參考 Microsoft.BizTalk.HttpTransport.dll

HTTP 標頭的命名空間適用于 http://schemas.microsoft.com/BizTalk/2003/http-properties 非 AS2 HTTP 標頭和 http://schemas.microsoft.com/BizTalk/2003/as2-properties AS2 標頭。

下列範例程式碼說明如何在協調流程的「建構訊息」圖形中升級 AS2 標頭屬性。 此範例碼升級的是 MDN 的 AS2 標頭。

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

另請參閱

開發和設定 BizTalk Server AS2 解決方案