О LAB EntLib, MSMQ и WCF - PullRequest
       61

О LAB EntLib, MSMQ и WCF

1 голос
/ 20 октября 2011

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

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

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

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

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

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

1 Ответ

2 голосов
/ 20 октября 2011

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

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

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

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

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