2011-01-26 66 views
2

是否可以直接从队列中读取消息作为字符串(与从计算机查看MSMQ消息时看到的消息体相同管理MSC管理单元),以便我可以将它自己保存到数据库中?我希望能够在不丢失任何数据的情况下将其存储起来,并且我担心如果反序列化/序列化它,我可能会失去一些东西。如何从队列中读取MSMQ消息对象作为消息体的字符串

+0

你只关心保存邮件正文并没有其他消息属性? – 2011-01-28 01:40:53

回答

3

试试这个..

string QueueName = @".\private$\publishingQueue"; 

//note, you cannot use method exists on remote queues 

if (MessageQueue.Exists(QueueName)) 
{ 

var queue = new MessageQueue(queueInfo.QueueName) 
{ 
MessageReadPropertyFilter = new MessagePropertyFilter 
{ 
     ArrivedTime = true, 
     Body = true 
    } 
}; 


var messages = queue.GetAllMessages(); 
var m = messages[0]; 
m.Formatter = new System.Messaging.XmlMessageFormatter(new String[] {}); 

StreamReader sr = new StreamReader(m.BodyStream); 

string ms = ""; 
string line; 

while (sr.Peek() >= 0) 
{ 
     ms += sr.ReadLine(); 
} 

//ms now contains the message  
}