Когда вы используете AsA_Server, вы указываете, что хотите иметь длительные очереди, и вам нужно будет настроить транзакционные очереди.
При отправке / получении транзакций MSMQ требует, чтобы вы отправляли, передавали, получали и обрабатывали как часть одной транзакции.Однако на самом деле все эти этапы происходят в собственных транзакциях.
Например, транзакция отправки завершается, когда отправитель отправляет сообщение в свою локальную подсистему MSMQ (даже если адрес очереди удален, отправитель по-прежнему отправляет в локальную очередь, которая действует как прокси-сервер дляудаленная очередь).
Транзакция передачи завершается, когда подсистема MSMQ на машине отправителя успешно передает сообщение в подсистему MSMQ на машине получателя.
Несмотря на то, что все это может происходить на одном компьютере, я предполагаю, что ваш метод Handle () записывает данные в базу данных на другом компьютере.
Проблема здесь в том, что для удовлетворительного завершения операции приема с точки зрения транзакции ваш вызов в базу данных должен быть успешным.Только тогда сообщение будет удалено из очереди ввода.Это предотвращает любую вероятность потери сообщения во время сбоя обработки.
Однако, чтобы обеспечить это по всей сети, необходимо задействовать DTC для координации распределенной транзакции с базой данных.
Итог: если вы хотите иметь долговременные очереди в распределенной среде, вам нужно будет использовать MSDTC.
Надеюсь, это поможет.