Вопрос

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

У меня есть веб -сервис WCF REST. Эта служба должна регистрировать информацию от ошибок в то, кто ее использует и когда.

Для этого был выбран блок регистрации приложений из Enterprise Library (5.0). Чтобы поддерживать хорошую производительность, мы решили использовать MSMQ. Цель состоит в том, чтобы хранить журналы, пока мы не приедем в файл в какой -то момент.

Я видел на нескольких веб -сайтах, которые мы можем использовать WCF для передачи сообщения в MSMQ, а затем использовать другую организацию для работы с очередью или что мы можем использовать MSMQ в качестве транспортного протокола для связи с WCF. Прямо сейчас я просто использую класс Lagger Lab, чтобы вставить журналы в очередь.

Я хочу использовать MSMQ для Desync моего веб -сервиса из функциональности журнала.

Итак, вот мои вопросы: какие случаи, когда MSMQ полезны с WCF? В случае, если я описываю, не излишне ли использовать другое приложение WCF, просто для того, чтобы водить некоторые вещи в файле?

Это было полезно?

Решение

Я думаю, что вы сбиваете с толку две вещи здесь. Транспорт MSMQ в WCF - это просто транспортный механизм, который можно использовать вместо HTTP или TCP. Ваша проблема в том, что (я полагаю) вы хотите войти асинхронно из Служба WCF, которая является хорошей идеей. Entlib включает в себя службу дистрибьютора MSMQ, которая будет подбирать события ведения журнала, записанные из вашего приложения в очередь, предполагая надлежащую конфигурацию блока регистрации, которая указывает MSMQ в качестве пункта назначения. Затем дистрибьютор фактически напишет его в базу данных.

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

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

В любом случае, я не уверен, отвечает ли это на ваш вопрос. Вот Хороший обзор того, как все это работает в Entlib.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top