Как получать сообщения в формате BinaryLogFormatter - PullRequest
0 голосов
/ 27 апреля 2011

Я использую библиотеку MS Patterns and Practices Enterprise Library MsmqTraceListener для записи записей в личную очередь с помощью BinaryLogFormatter.

Теперь я хотел бы прочитать эти записи журнала из очереди. Мне нужно установить свойство Formatter MessageQueue, прежде чем я смогу посмотреть на сообщение. Я ожидал, что смогу использовать BinaryLogFormatter для EnterpriseLibrary, но не могу привести его в качестве IMessageFormatter. (InvalidCastException)

Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 13 июня 2012

Одна вещь, которую нужно обязательно сделать, это включить следующее при настройке вашего сообщенияQueue. Если не дезертирство не будет работать.

((XmlMessageFormatter)messageQueue.Formatter).TargetTypeNames = new string[] { "System.String" };

Однажды талией, пытаясь понять это.

1 голос
/ 04 мая 2011

Вы смотрели на Службу распространения корпоративных библиотек ?Это может сделать то, что вы хотите из коробки.Краткое руководство по реализации: Корпоративная библиотека 5 Ведение журнала с использованием MSMQ .

Если вы не хотите использовать полную службу распространителя, посмотрите исходный код, чтобы увидеть, как они получают доступ к очереди.Похоже, что они десериализуются с использованием BinaryLogFormatter напрямую.Из MsmqLogDistributor.cs :

using (MessageQueue msmq = CreateMessageQueue())
{
    Message message = msmq.Peek();

    string serializedEntry = message.Body.ToString();

    LogEntry logEntry = null;
    try
    {
        logEntry = BinaryLogFormatter.Deserialize(serializedEntry);
    }
    catch (FormatException formatException)
    {
        ...
    }
    catch (SerializationException serializationException)
    {
        ...
    }

    if (logEntry != null)
    {
        logWriter.Write(logEntry);
    }

    message = msmq.Receive();

    if (this.StopReceiving)
    {
        this.isCompleted = true;
        return;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...