Asynkrona systemmeddelanden

gäller för:SQL ServerAzure SQL Managed Instance

Service Broker använder tre systemmeddelandetyper för att kommunicera status och felinformation från Service Broker.

Hantera systemmeddelanden

De flesta meddelandena i en Service Broker-konversation är de programdefinierade meddelanden som används för att kommunicera mellan tjänster. Varje meddelande måste överensstämma med ett format av meddelandetyp som har definierats av en CREATE MESSAGE TYPE instruktion. Den uppsättning meddelandetyper som tillåts för en konversation definieras av kontraktet som anges i -instruktionen BEGIN DIALOG CONVERSATION .

Förutom de programdefinierade meddelandetyperna som anges i kontraktet kan alla konversationer även ta emot meddelanden som använder någon av tre systemdefinierade meddelandetyper. Service Broker använder dessa meddelandetyper för att rapportera fel och status för dialogrutor. Varje program måste innehålla logik för att hantera felmeddelanden och slutdialogrutor. Om programmet anger en konversationstimer för en dialogkonversation måste programmet innehålla logik för att hantera dialogtimermeddelanden. Service Broker tillhandahåller dessa meddelandetyper till varje tjänst, oavsett om de visas i kontraktet för tjänsten eller inte. Mer information finns i Hantera Service Broker-felmeddelanden.

Felmeddelanden

När en fjärrtjänst avslutar en dialogruta med ett fel eller om den lokala koordinatorn upptäcker ett oåterkalleligt fel i en dialogruta skapar den lokala asynkron meddelandekö ett felmeddelande. Felmeddelanden är av meddelandetyp http://schemas.microsoft.com/SQL/ServiceBroker/Error. Felmeddelanden verifieras som välformulerad XML.

Xml-dokumentet som finns i ett felmeddelande använder namnområdet http://schemas.microsoft.com/SQL/ServiceBroker. Rotelementet i dokumentet har det lokala namnet Fel och innehåller ett element med namnet Kod och ett element med namnet Meddelande. Kodelementet innehåller ett heltalsvärde. Elementet Meddelande innehåller den text som kan läsas av människor i meddelandet.

Ett felmeddelande som genereras av en tjänst som bearbetar utgiftsrapporter kan till exempel innehålla följande XML (omformaterat för läsbarhet):

<?xml version="1.0"?>
<Error xmlns="http://schemas.microsoft.com/SQL/ServiceBroker">
  <Code>12</Code>
  <Description>
    Unknown cost center "127-1000". Please check the cost center list
    and resubmit the report.
  </Description>
</Error>

En mottagningsåtgärd får ett felmeddelande före ett meddelande för den dialogrutan förutom ett timermeddelande i dialogrutan. Detta inträffar oavsett i vilken ordning felmeddelandet kom till kön. När en kö har både ett dialogtimermeddelande och ett felmeddelande, tar en mottagningsåtgärd emot timermeddelandet före felmeddelandet.

När ett felmeddelande tas emot för en dialogruta genererar asynkron meddelandekö ett fel om ett program försöker skicka ett meddelande i dialogrutan. Ett program kan dock ta emot eventuella återstående meddelanden för dialogrutan, även efter att det har fått ett felmeddelande.

Avsluta dialogrutor

När ett program avslutar en dialogruta utan att ange något fel skickar den lokala asynkron meddelandekö ett meddelande om slutdialogrutan till fjärrkoordinatorn. Slutdialogrutor är av meddelandetyp https://schemas.microsoft.com/SQL/ServiceBroker/EndDialog.

Slutdialogrutor är tomma meddelanden. En mottagningsåtgärd tar emot ett meddelande om slutdialogrutan i den ordning meddelandet kom till kön.

Dialogtimermeddelanden

Dialogtimermeddelanden anger att konversationstimern i en dialogruta har upphört att gälla. Dessa meddelanden är av meddelandetyp https://schemas.microsoft.com/SQL/ServiceBroker/DialogTimer. En konversationstimer är specifik för ena sidan av konversationen. Service Broker skickar aldrig ett dialogtimermeddelande till den andra sidan av konversationen.

Dialogtimermeddelanden är tomma meddelanden. En mottagningsåtgärd tar emot dialogrutans timermeddelande innan något annat meddelande för den dialogrutan, oavsett i vilken ordning tidsgränsmeddelandet kom till kön.