如何接收BinaryLogFormatter格式化的消息

时间:2011-04-27 13:32:00

标签: logging enterprise-library msmq

我正在使用MS模式和实践企业库MsmqTraceListener使用BinaryLogFormatter将条目记录到专用队列。

我现在想从队列中读取这些日志条目。在我查看message.Body之前,我需要设置MessageQueue的Formatter属性。我希望能够使用EnterpriseLibrary的BinaryLogFormatter,但我无法将其转换为IMessageFormatter。 (InvalidCastException的)

我错过了什么?

2 个答案:

答案 0 :(得分:1)

你看过Enterprise Library Distributor Service了吗?它可能会开箱即用。实施的简短指南:Enterprise Library 5 Logging using MSMQ

如果您不想使用完整的Distributor Service,请查看源代码以了解它们如何访问队列。它们似乎是直接使用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;
    }
}

答案 1 :(得分:1)

确保要做的一件事是在设置messageQueue时包含以下内容。如果不是,那么去毛刺将不起作用。

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

一个腰下午试图把这个拿出来。