Udostępnij za pośrednictwem


Obsługa komunikatów o błędach usługa Broker

Service Broker aplikacje muszą obsługiwać dwa typy komunikatów o błędach odbierane z konwersacji: komunikaty o błędach, utworzone przez aplikację, która używa Service Broker i komunikatów systemowych, utworzony przez Service Broker.

Raportowanie warunki błędów aplikacji

Service Broker aplikacje są zazwyczaj systemów, które składają się z kodem asynchronicznie uruchomionych na różnych komputerach.Części aplikacji komunikować się ze sobą za pomocą wiadomości wysłanych Service Broker konwersacji. Część aplikacji na jednej stronie Service Broker konwersacji mogą zgłaszać błędy aplikacji po drugiej stronie przez wysłanie komunikatów o błędach. Odbiorczy część aplikacji musi mieć kod do wykrywać komunikat o błędzie i obsługiwać poprawnie warunek błędu.

Service Broker aplikacje mogą komunikować się błędy, przy użyciu obu typów zdefiniowanych przez system lub zdefiniowane przez aplikację wiadomości.

Komunikaty o błędach zdefiniowane przez system

Za pomocą klauzula WITH błąd instrukcja END KONWERSACJI raportowanie błędów aplikacji, które są wystarczająco poważny, wymaganie Kończenie konwersacji.Na przykład:

END CONVERSATION @ConversationHandle
    WITH ERROR = 1234 DESCRIPTION = "The account specified in the invoice does not exist, verify the account number."

instrukcja KONWERSACJI END WITH błąd:

  • Generuje Service Broker komunikat o błędzie systemu i wysyła go do jego strony zdalnej komunikacji. Komunikaty o błędach używania przez system https://schemas.Microsoft.com/SQL/ServiceBroker/Error typ komunikatu.

  • Kończy się w lokalnej stronie konwersacji.

Część aplikacji, która odbiera Błąd wiadomość powinna czy wszystkie wymagane czyszczenie i zakończyć bok konwersacji.

Aplikacja może zakończyć aktywny konwersacji z powodu błędu w dowolnym momencie.Niemniej jednak, jeśli jego strony zdalnej komunikacji już zakończyła się do konwersacji Service Broker komunikat o błędzie nie będzie wysyłać do jego strony zdalnej. Zamiast tego Service Broker po prostu kończy się w lokalnej stronie konwersacji i usuwa wszystkie wiadomości konwersacji z lokalnej kolejki.

Zdefiniowany przez aplikację komunikaty o błędach

Można używać zdefiniowanych przez aplikację komunikaty raportowanie błędów, które nie są wystarczająco poważny, aby zakończyć konwersację.Projektant aplikacji można określić następujące czynności:

  • Jeden lub więcej typów wiadomości, używane do komunikowania się tych błędów aplikacji.

  • Logika obsługi tych typów komunikatów.

Część aplikacji, która wystąpi stan błędu można wykonać następujące czynności:

  • Wykonuje wszelkie wymagane oczyszczania lokalnej stronie konwersacji.

  • Tworzenie wiadomości przy użyciu określonych aplikacji typ komunikatu i wysłać go w konwersacji.

Zdalne część aplikacji, która odbiera komunikat o błędzie musi mieć kod rozpoznawanie komunikat o błędzie i wykonać wszystkie wymagane czyszczenie jej stronie połączenia.

Obsługa komunikatów o błędach

Odbieranie wiadomości z kodem aplikacji Service Broker konwersacje musi mieć logiką, służący do przetwarzania komunikatów o błędach odbierane z konwersacji. Kod musi wykryć i obsługuje następujące czynności:

  • Komunikaty o błędach generowane przez aplikację, która używa typ komunikatu Błąd zdefiniowany przez aplikację.

  • Komunikaty o błędach generowane przez aplikację, która korzysta z klauzula WITH błąd instrukcja END KONWERSACJI.Za pomocą tych komunikatów o błędach https://schemas.Microsoft.com/SQL/ServiceBroker/Error typ komunikatu i mieć wartość dodatnią w Kod element.

  • Komunikaty o błędach generowane przez Service Broker. These error messages use the https://schemas.microsoft.com/SQL/ServiceBroker/Error message type and have a negative number in the Code element.Service Broker creates an Error message when an error makes it impossible for Service Broker to continue the conversation.Na przykład Service Broker Nie można zlokalizować usługi obiekt docelowy, ponieważ usługa nie istnieje w bieżącej instancji i jest puste dla usługi w tabela routingu. W takim przypadku Service Broker Tworzy Błąd wiadomości w konwersacji.

Zestaw wyników zwracanych przez instrukcję przyjęcie zawiera message_type_name kolumna.Kod, który odbiera Service Broker Zazwyczaj wiadomości zastosowań message_type_name rozesłać każdej wiadomości do kodu, który przetwarza typu skojarzone wiadomości.

Dokładne logiki następuje program do obsługi błędu zależy od aplikacji.Jednym z przykładów jest program, który korzysta z przechowywania wiadomości i wymaga kompensacyjne transakcji, gdy zadanie zakończy się niepowodzeniem.Kiedy zostanie odebrany błąd, program kwerendę kolejki dla wiadomości, które zostały już przetworzone, przeprowadza kompensacyjne transakcji, a następnie kończy się do konwersacji.Z drugiej strony jeśli program ma tylko do rekordu, który wystąpił błąd, program rejestruje błąd do tabela rejestrowania i kończy się do konwersacji.

The Code element of the https://schemas.microsoft.com/SQL/ServiceBroker/Error message contains the error code.Błąd wiadomości utworzone przez aplikację, która korzysta z KONWERSACJI END WITH błąd mieć wartość dodatnią dla kodu błędu.Błąd komunikaty generowane przez Service Broker zawiera wartości ujemne dla kodu błędu. The Code value in messages generated by Service Broker is just the negated value of the error that caused the Error message.Na przykład, gdy wystąpił błąd sprawdzania poprawności XML (kod błędu 9615) wystąpi, Database Engine Tworzy Błąd komunikat maKod element, który zawiera wartość -9615.

Gdy aplikacja odbiera Błąd wiadomości, program nie może wysyłać kolejnych wiadomości w tej konwersacji.Aplikacja obsługuje błąd, a następnie kończy bok konwersacji.Jeśli aplikacja odbierze typ komunikatu Błąd zdefiniowany przez aplikację, konwersacji jest nadal dostępne, chyba że zdalnego część aplikacji również uruchomiono END KONWERSACJI.

Procedury obsługa błędów powinny być kodowane w taki sposób, aby zapobiec poison wiadomości.Aby uzyskać więcej informacji zobacz Obsługa wiadomości typu poison.