Поделиться через


ошибки Server-Side

Прослушиватель и игрок работают вместе, чтобы справиться с подозрительными сообщениями. Если транзакция, которая выполняется обратно, завершается сбоем, очередь сообщений переместит входное сообщение обратно в очередь ввода. Проигрыватель прерывает транзакцию, если она получает сбой HRESULT из компонента сервера или перехватывает исключение. Если проблема сохраняется, прослушиватель может непрерывно цикливать в следующем шаблоне:

  • Отменяет сообщение
  • Создает экземпляр объекта
  • Страдает откатом
  • Помещает сообщение обратно в начало очереди

Служба очередей компонентов обрабатывает этот сбой с помощью ряда очередей повторных попыток для конкретного приложения. Создается при установке компонента семь очередей для каждого приложения, как показано ниже.

  1. Обычная очередь входных данных. Имя этой очереди — это имя приложения COM+. Это общедоступная очередь очереди сообщений.

  2. Первая очередь повторных попыток. Сообщения перемещаются здесь, если транзакция неоднократно завершается ошибкой при обработке сообщений из обычной входной очереди. Сообщения в этой очереди обрабатываются через одну минуту. Перед перемещением в обратную сторону второй очереди повторных попыток можно выполнить три раза. Эта очередь называется ApplicationName_0. Эта очередь представляет собой частную очередь очереди сообщений.

  3. Вторая очередь повторных попыток. Сообщения перемещаются здесь, если транзакция неоднократно завершается ошибкой при обработке сообщений из первой очереди повторных попыток. Сообщения в этой очереди обрабатываются через две минуты. Перед перемещением в обратную сторону третьей очереди повторных попыток можно выполнить три раза. Эта очередь называется ApplicationName_1. Эта очередь представляет собой частную очередь очереди сообщений.

  4. Третья очередь повторных попыток. Сообщения перемещаются здесь, если транзакция неоднократно завершается ошибкой при обработке сообщений из второй очереди повторных попыток. Сообщения в этой очереди обрабатываются через четыре минуты. Перед перемещением в спину четвертой очереди повторных попыток можно получить три раза в эту очередь. Эта очередь называется ApplicationName_2. Эта очередь представляет собой частную очередь очереди сообщений.

  5. Четвертая очередь повторных попыток. Сообщения перемещаются здесь, если транзакция неоднократно завершается ошибкой при обработке сообщений из третьей очереди повторных попыток. Сообщения в этой очереди обрабатываются через восемь минут. Перед перемещением в пятую очередь можно повторно выполнить три раза в этой очереди. Эта очередь называется ApplicationName_3. Эта очередь представляет собой частную очередь очереди сообщений.

  6. Пятая очередь повторных попыток. Сообщения перемещаются здесь, если транзакция неоднократно завершается ошибкой при обработке сообщений из четвертой очереди повторных попыток. Сообщения в этой очереди обрабатываются через шестнадцать минут. Перед перемещением в окончательную очередь можно повторно выполнить три раза в этой очереди. Эта очередь называется ApplicationName_4. Это частная очередь очереди очередей сообщений.

  7. Окончательная очередь отдыха для конкретного приложения. Сообщения перемещаются здесь, если транзакция неоднократно прерывается при попытке в пятой очереди повторных попыток. Эта очередь называется ApplicationName_DeadQueue. Это частная очередь очереди очередей сообщений. Последняя очередь отдыха не обслуживается прослушивателем очереди. Сообщения остаются здесь, пока они не перемещены вручную (возможно, программой перемещения сообщений в очереди) или удаляются обозревателем очереди сообщений.

Сообщения, которые не доступны для воспроизведения, так как ясно, что каждая попытка повторных попыток завершится ошибкой, может быть перемещена непосредственно в очередь окончательного отдыха приложения, не используя все уровни повторных попыток.

Игрок выдает событие COM+, чтобы уведомить заинтересованных сторон о том, что сообщения не могут быть воспроизведены. События COM+ выдаются в следующих ситуациях:

  • При прерывании транзакции
  • При перемещении сообщения из одной очереди в другую
  • Когда сообщение помещается в окончательную очередь отдыха

Перед переходом из одной очереди в другую можно изменить сообщения. Механизм безопасности компонентов COM+ позволяет переместить сообщение в очереди повторных попыток, а затем повторно вставить в начальную очередь входных данных приложения. Дополнительные сведения о безопасности очередных компонентов см. в безопасности очередей компонентов.

Очереди повторных попыток создаются вместе с основной очередью приложений, когда приложение помечается как в очереди средством администрирования служб компонентов или с помощью функций пакета SDK для администрирования COM+. Служба компонентов очереди обеспечивает гибкость в механизме повторных попыток, позволяя удалять очереди повторных попыток. Например, если удаляются все очереди повторных попыток, сообщение, которое постоянно прерывается, будет перемещено непосредственно из очереди приложения в очередь окончательного отдыха приложения. Удалив одну или несколько очередей повторных попыток, можно уменьшить количество и длину повторных попыток. Если очереди удаляются из последовательности повторных попыток, время оставшихся очередей соответствует позиции в последовательности очередей повторных попыток. Например, если удалить очередь повторных попыток ApplicationName_1, ApplicationName_2 и ApplicationName_3, сообщения в ApplicationName_4 будут обрабатываться, как если бы очередь была второй очередью повторных попыток.

Механизм повторных попыток предназначен для завершения сообщения, если это возможно. В некоторых случаях сообщение может оказаться невозможным. Например, клиент может попытаться снять деньги с счета, у которой недостаточно средств. В этих обстоятельствах можно обрабатывать ошибку несколькими способами, включая следующие:

  • Создание диагностики и выдача предупреждения
  • Создание компенсирующей транзакции
  • Пропустить проблему и закрыть сообщение

Как и постоянные сбои на стороне клиента, служба компонентов очереди позволяет связать класс исключений с компонентом. Класс исключений связан с компонентом с помощью вкладки Advanced на странице свойств компонента средства администрирования служб компонентов или с помощью функций COM+Administration. Класс исключений позволяет разработчику управлять после получения сообщения и перед перемещением этого сообщения в очередь окончательного отдыха приложения. Дополнительные сведения о классе исключений см. в разделе Постоянные Client-Side сбои.

Ниже приведена последовательность событий для обработки исключений на стороне сервера:

  1. Сообщение перемещается через доступные очереди повторных попыток для конкретного приложения.
  2. Последняя повторная попытка в последней очереди повторных попыток завершается ошибкой.
  3. Время выполнения службы очередных компонентов извлекает целевой компонент из сообщения и проверяет наличие класса исключений.
  4. Время выполнения создает экземпляр класса исключений.
  5. Запросы во время выполнения IPlaybackControl в классе исключений.
  6. Вызовы во время выполнения IPlaybackControl::FinalServerRetry в классе исключений.
  7. Время выполнения воспроизводит все вызовы свойств и методов из сообщения в класс исключений.
  8. Если шаги 4–6 не выполнены, время выполнения перемещает сообщение в очередь окончательного отдыха приложения.

Если вам нужно вмешаться в процесс, описанный выше, или необходимо переместить отравляющее сообщение из окончательной очереди отдыха, используйте программу перемещения сообщений. Дополнительные сведения о служебной программе перемещения сообщений см. в обработке ошибок.

ошибокClient-Side

постоянные Client-Side сбои