BizTalk メッセージング エンジンは、ポートを介したメッセージの処理中に発生した条件に応じて、肯定受信確認 (ACK) と否定受信確認 (NACK) を生成します。 BizTalk Server は、メッセージの正常な送信を示す肯定確認と、メッセージの送信失敗と中断を示す否定受信確認を発行します。
承認を使用する理由
肯定的および否定的な受信確認は、メッセージが宛先に到着したか、途中で 1 つ以上の問題が発生したかを判断するために使用できる強力なフィードバックを提供します。 たとえば、受信確認は次の場合に役立ちます。
スキーマ検証やその他のエラーについて、新しい取引先の受信ポートを監視する必要があります。
承認のためにパートナーに正常に送信された場合は、承認のために送信されたローン要求の状態を "処理中" としてマークし、送信に失敗した場合は "失敗" としてマークする必要があります (たとえば、パートナーのサーバーがダウンしている場合)。
複数の発注書を含むインターチェンジを処理し、送信または送信に失敗した注文の数を追跡する必要があります。
これらの各シナリオは、受信確認と、フィルターを使用するコンテンツ ベースのルーティングを使用して実現できます。
ルーティング受信確認
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 | 元のメッセージからインスタンス ID を識別します。 |
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) の両方の受信確認は、少なくとも 1 つの一致するサブスクリプションがある場合、障害が発生した時点で MessageBox データベースに発行されます。 たとえば、BizTalk Server で受信ポートから読み取られたメッセージの一致するスキーマが見つからない場合、NACK サブスクリプションがない場合、メッセージは中断され (失敗したメッセージ ルーティングが有効になっていない場合)、NACK は発行されません。