Udostępnij za pośrednictwem


Trwałe błędy Client-Side

W niektórych przypadkach kolejkowanie komunikatów może przenieść komunikat do kolejki docelowej. Jeśli na przykład kontrolki dostępu do kolejki nie zezwalają na przenoszenie komunikatu z klienta na serwer, komunikat o przestępstwach zostanie przeniesiony do kolejki utraconych komunikatów po stronie klienta. W takim przypadku usługa składników com+ w kolejce umożliwia skojarzenie klasy wyjątków ze składnikiem. Aby skojarzyć klasę wyjątków ze składnikiem, użyj karty Zaawansowane na stronie właściwości składnika narzędzia administracyjnego usługi składników. Klasę wyjątków można również skojarzyć programowo przy użyciu atrybutu składnika wykazu ExceptionClass funkcji administracyjnych COM+.

Klasa wyjątku jest zdefiniowana jako identyfikator ProgID lub CLSID składnika implementujący IPlaybackControl. Usługa składników w kolejce ma monitor kolejki utraconych komunikatów, który skanuje kolejkę utraconych komunikatów Xact. Jeśli w kolejce występuje komunikat, kolejka utraconych komunikatów tworzy wystąpienie procedury obsługi wyjątków skojarzonej z składnikiem docelowym i wywołuje IPlaybackControl::FinalClientRetry, wskazując, że wystąpił błąd po stronie klienta, nieodwracalny.

Oprócz IPlaybackControlprogram obsługi wyjątków powinien zaimplementować ten sam zestaw interfejsów co składnik serwera, dla którego obsługuje wyjątki. Po wywołaniu wywołania IPlaybackControl::FinalClientRetry składniki w kolejce odtwarzają komunikat o błędzie w procedurze obsługi wyjątków. Dzięki temu program obsługi wyjątków może zaimplementować alternatywne zachowanie komunikatów, których nie można przenieść na serwer — na przykład przez wygenerowanie transakcji wyrównywczej.

Jeśli program obsługi wyjątków ukończy wszystkie wywołania metody odtwarzane, komunikat zostanie usunięty z kolejki utraconych komunikatów Xact i zostanie odrzucony. Jeśli jednak program obsługi wyjątków przerywa komunikat, zwracając stan błędu z jednego z wywołań metody, komunikat zostanie zwrócony do kolejki utraconych komunikatów Xact. Następująca sekwencja zdarzeń pokazuje, jak są obsługiwane wyjątki po stronie klienta:

  1. Kolejkowanie komunikatów nie może dostarczyć komunikatu do serwera i umieścić komunikat w kolejce utraconych komunikatów Xact.
  2. Odbiornik kolejki utraconych komunikatów (DLQL) znajduje komunikat w kolejce utraconych komunikatów Xact.
  3. DlQL pobiera identyfikator CLSID składnika docelowego z komunikatu i sprawdza klasę wyjątków.
  4. Biblioteka DLQL tworzy wystąpienie klasy wyjątku.
  5. Zapytanie DLQL dla IPlaybackControl dla klasy wyjątku.
  6. Biblioteka DLQL wywołuje metodę IPlaybackControl::FinalClientRetry w klasie wyjątku.
  7. Biblioteka DLQL odtwarza wszystkie wywołania właściwości i metody z komunikatu do klasy wyjątku.
  8. DlQL usuwa komunikat, jeśli program obsługi wyjątków zakończy transakcję pomyślnie. Procedura obsługi wyjątków może wydać IObjectContext::SetAbort, a komunikat pozostanie w kolejce utraconych komunikatów.

Jeśli którykolwiek z powyższych kroków nie powiedzie się, komunikat pozostanie w kolejce utraconych komunikatów Xact.

Po uruchomieniu biblioteka DLQL odczytuje każdy komunikat w kolejce komunikatów transakcyjnych utraconych wiadomości i tworzy wystąpienie klasy wyjątku dla każdego komunikatu składników w kolejce. Po przejściu przez kolejkę czeka na nowe komunikaty. Następnie przetwarza każdy nowy komunikat kolejki utraconych komunikatów podczas ich nadejścia.

Jeśli musisz interweniować w procesie opisanym tutaj lub jeśli musisz przenieść komunikat trucizny z końcowej kolejki odpoczynku, użyj narzędzia mover komunikatów. Aby uzyskać więcej informacji na temat narzędzia mover komunikatów, zobacz Obsługa błędów.

błędy Client-Side

błędy Server-Side