共用方式為


使用通知

BizTalk 訊息引擎會產生肯定回應(ACK)和否定回應(NACK),以回應透過埠處理訊息期間遇到的狀況。 BizTalk Server 會發佈正面通知,表示訊息成功傳輸,以及指出訊息的傳輸失敗和暫停的負面通知。

為什麼要使用致謝?

正面和負面通知提供強烈意見反應,可讓您用來判斷訊息是否已抵達其目的地,或一路上遇到一或多個問題。 例如,通知在下列情況下很有用:

  • 您想要監視新貿易夥伴的接收埠,以進行架構驗證和其他錯誤。

  • 如果貸款要求成功傳送給合作夥伴進行核准,則您想要將送出以供核准的貸款要求狀態標示為「正在處理中」,如果傳輸失敗,則為「失敗」(例如,如果合作夥伴的伺服器已關閉)。

  • 您處理包含多個採購單的交換訊息,並希望追蹤成功傳輸或傳輸失敗的訂單數目。

    您可以使用使用篩選條件的通知和內容型路由來完成上述每個案例。

路由確認

在發送 ACK 或 NACK 時,來自導致 ACK/NACK 的原始訊息的所有訊息上下文屬性都會被降級。 任何升級的屬性都不會流向確認。 若要路由確認回應,請使用 BTS 命名空間中的下列屬性來建置篩選器:

屬性名稱 數據類型 說明
BTS。AckFailureCategory xs:int 識別 ErrorCategory,這會提供暫停的位置和原因。
BTS.AckFailureCode xs:string 識別 ErrorCode,這會提供暫停的位置和原因。
BTS.AckType xs:string 值為代表正向確認的 ACK,而代表負向確認的 NACK。
BTS。AckID xs:string 識別原始訊息的 MessageID
BTS.AckOwnerID xs:string 從原始訊息識別實例標識碼。
BTS.CorrelationToken xs:string 如果原始訊息中存在關聯令牌,則識別該令牌。
BTS.AckDescription xs:string 識別 ErrorDescription,這會提供暫停的位置和原因。
BTS.AckSendPortID xs:string 從原始訊息識別 SendPortID
BTS.AckSendPortName xs:string 從原始訊息識別 SendPortName
BTS.AckOutboundTransportLocation xs:string 從原始訊息識別 OutboundTransportLocation
BTS.AckReceivePortID xs:string 識別原始訊息中的 ReceivePortID
BTS.AckReceivePortName xs:string 識別原始訊息中的 ReceivePortName
BTS.AckInboundTransportLocation xs:string 從原始訊息識別 InboundTransportLocation

備註

包含錯誤資訊的屬性不存在於 ACK 中,因為它們表示正傳遞。

否認確認訊息本文

有關正面或負面認可的大部分重要資訊都包含在內容屬性中。 除了上下文屬性外,NACK 還包含一個訊息主體部分,其中包含SOAP錯誤。 SOAP 錯誤的格式如下所示:

<?xml version="1.0" encoding="utf-8"?>  
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">  
  <SOAP:Body>  
    <SOAP:Fault>  
      <faultcode>Microsoft BizTalk Server Negative Acknowledgment </faultcode>  
      <faultstring>An error occurred while processing the message, refer to the details section for more information </faultstring>  
      <faultactor>C:\Projects\Sample\Locations\Response\FM_%MessageID%.xml</faultactor>  
      <detail>  
        <ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd">  
          <NAckID>{FFB1A60B-E593-4620-8897-4E9C7030A937}</NAckID>  
          <ErrorCode>0xc0c01658</ErrorCode>  
          <ErrorCategory>0</ErrorCategory>  
          <ErrorDescription>There was a failure executing the send pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "XML assembler" Send Port: "Failed Message" URI: "C:\Projects\Sample\Locations\Response\FM_%MessageID%.xml" Reason: This Assembler cannot retrieve a document specification using this type: "http://Sample#Unknown".  </ErrorDescription>  
        </ns0:NACK>  
      </detail>  
    </SOAP:Fault>  
  </SOAP:Body>  
</SOAP:Envelope>  

配接器引發的例外狀況訊息位於 ErrorDescription 元素的 SOAP 詳細數據區段中。

從協調流程存取訊息本文

如果您有需要傳遞通知的協作埠,當傳輸失敗時,會擲回的 DeliveryFailureException 會從 NACK 訊息本文中包含的 SOAP 錯誤被反序列化。 若要從協調流程中存取例外狀況訊息字串,請將 DeliveryFailureException 轉換為 SoapException,然後存取 InnerXml,如下列程式代碼所示:

// Cast the DeliveryFailureException to a SoapException…  
System.Web.Services.Protocols.SoapException se = (System.Web.Services.Protocols.SoapException)e.InnerException;  
System.Diagnostics.Trace.WriteLine(se.Detail.InnerXml);  
//e is an Microsoft.XLANGs.BaseTypes.DeliveryFailureException  
//object type created in an Exception handler  

上述程式代碼範例會傳回類似下列的 XML 片段:

<?xml version="1.0" encoding="utf-8"?>  
<ns0:NACK Type="NACK" xmlns:ns0="http://schema.microsoft.com/BizTalk/2003/NACKMessage.xsd">  
  <NAckID>{FFB1A60B-E593-4620-8897-4E9C7030A937}</NAckID>  
  <ErrorCode>0xc0c01658</ErrorCode>  
  <ErrorCategory>0</ErrorCategory>  
  <ErrorDescription>There was a failure executing the send pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLTransmit, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "XML assembler" Send Port: "Failed Message" URI: "C:\Projects\Sample\Locations\Response\FM_%MessageID%.xml" Reason: This Assembler cannot retrieve a document specification using this type: "http://Sample#Unknown".</ErrorDescription>  
</ns0:NACK>  

何時發佈確認書?

正面 (ACK) 和負數 (NACK) 通知都會發佈至 MessageBox 資料庫,前提是至少有一個相符的訂用帳戶。 例如,如果 BizTalk Server 找不到從接收埠讀取之訊息的相符架構,而且沒有 NACK 訂閱,則會暫停訊息(如果尚未啟用失敗的訊息路由),而且不會發布 NACK

另請參閱

錯誤處理
使用失敗的訊息路由