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

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

Zgłoszenie warunków błędów aplikacji

Service Broker aplikacje są zazwyczaj systemów, które składają się z kodu uruchamiane asynchronicznie na różnych komputerach.Części aplikacji komunikować się ze sobą za pomocą wiadomości wysyłane Service Broker konwersacji.Część aplikacji na jednej stronie Service Broker konwersacji można Raportuj błędy aplikacji na drugą stronę, wysyłając komunikaty o błędach. Odbiorczy część aplikacji musi mieć kod wykrywać błąd wiadomości 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 przez aplikację wiadomości.

Komunikaty o błędach zdefiniowane przez system

Użyć klauzula błąd Z KONWERSACJI koniec instrukcja raportowanie błędów aplikacji, które są wystarczająco surowe, aby wymagać 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 zakończenia KONWERSACJI Z błędów:

Część aplikacji, która odbiera Błąd wiadomości należy wykonanie niezbędnych oczyszczania i zakończyć bok konwersacji.

Aplikację można zakończyć aktywne konwersacji z powodu błędu w dowolnym czas.Jednakże, jeśli strona zdalna konwersacji już zakończył konwersacji, Service Broker nie wyśle komunikat o błędzie na stronie zdalnego.Zamiast tego Service Broker po prostu kończy lokalnej stronie konwersacji i usuwa wszystkie wiadomości w konwersacji z lokalnej kolejki.

Definicja aplikacji komunikaty o błędach

Można użyć wiadomości błąd zdefiniowany przez aplikację, aby raportować błędy, które nie są wystarczająco poważne, aby zakończyć konwersację.Projektanta aplikacji można określić następujące ustawienia:

  • Jeden lub więcej typów wiadomości, które są używane do komunikacji te błędy aplikacji.

  • Logika obsługi tych typów wiadomości.

Część aplikacji, który napotka warunek błędu można wykonać następujące czynności:

  • Wykonuje wszelkie wymagane oczyszczania lokalnej stronie konwersacji.

  • Tworzenie wiadomości przy użyciu typ komunikatu przez aplikację i wysłać go na konwersację.

Zdalny część aplikacji, która odbiera komunikat o błędzie musi mieć kod rozpoznawanie komunikat o błędzie i wykonać oczyszczania wymaganego po jego stronie połączenia.

Obsługa komunikatów o błędach

Kod aplikacji odbieranie wiadomości z Service Broker konwersacji musi mieć logiki przetwarzania komunikatów o błędach odbierane z konwersacji.Kod musi wykrywać i obsługiwać następujące czynności:

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

  • Komunikaty o błędach generowane przez aplikacji korzystającej z klauzula błąd z instrukcja END KONWERSACJI.Za pomocą tych komunikatów o błędach https://schemas.microsoft.com/SQL/ServiceBroker/Error typ komunikatu i liczbę dodatnią w kodu element.

  • Komunikaty o błędach generowane przez Service Broker.Za pomocą tych komunikatów o błędach https://schemas.microsoft.com/SQL/ServiceBroker/Error typ komunikatu i liczby ujemnej w kodu element. Service Broker tworzy Błąd podczas błąd uniemożliwia dla Service Broker , aby kontynuować konwersację.Na przykład Service Broker nie może zlokalizować usługi docelowej, ponieważ usługa nie istnieje w bieżącej wystąpienie i brak wpisu dla usługi w tabela routingu.W tej sytuacji Service Broker tworzy Błąd wiadomości w konwersacji.

Wyników zwróconych przez odbioru instrukcja zawiera message_type_name kolumna.Kod, który odbiera Service Broker wiadomości zwykle korzysta z message_type_name do trasa każdej wiadomości do kodu, który przetwarza typ komunikatu skojarzone.

Dokładne logiki program następuje do obsługi błędu zależy od aplikacji.Przykładem jest program, który używa do przechowywania wiadomości i wymaga kompensacyjnych transakcji, jeśli zadanie nie powiedzie się.Kiedy zostanie odebrany błąd, program kwerendę kolejki komunikatów, które już zostały przetworzone, wykonuje kompensacyjnych transakcji i kończy się konwersacji.Natomiast jeśli program ma tylko do rekordu, który wystąpił błąd, program rejestruje błąd w tabela rejestrowania i kończy konwersacji.

Kodu element https://schemas.microsoft.com/SQL/ServiceBroker/Error wiadomość zawiera kod błędu.Błąd wiadomości utworzone za pomocą aplikacji korzystającej z KOŃCA KONWERSACJI Z błąd ma wartość dodatnią dla kodu błędu.Błąd komunikaty generowane przez Service Broker zawiera wartości ujemne dla kodu błędu.Kodu wartość komunikaty generowane przez Service Broker jest właśnie zanegowane wartość błąd, który spowodował Błąd wiadomości.Występuje na przykład gdy błąd sprawdzania poprawności XML (kod błędu 9615), Aparat baz danych tworzy Błąd wiadomość zawierającą kodu element, który zawiera wartość -9615.

Gdy aplikacja otrzymuje Błąd wiadomość, program może już wysyłać 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 wciąż dostępna, chyba że zdalnego część aplikacji również uruchomiono koniec KONWERSACJI.

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