Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.IO;
- using System.Text;
- namespace System.Messaging {
- /// <summary>
- /// MSMQ Writer, Can be used a trace writer
- /// </summary>
- public class MSMQWriter:TextWriter {
- /// <summary>
- /// Used to to purge all messages when token is found in dequeuing messages
- /// </summary>
- public const string PURGE_TOKEN = "[PURGE]";
- MessageQueue _msmq;
- bool _setup;
- public Exception SetupError { get; set; }
- readonly ActiveXMessageFormatter _formater;
- public bool IsAvailable { get; set; }
- public string MessageQueuePath { get; set; }
- public MSMQWriter()
- : this(null) {
- _formater = new ActiveXMessageFormatter();
- }
- public MSMQWriter(string msmqPath)
- : base() {
- this.MessageQueuePath = msmqPath ?? @".\private$\dbmon";
- }
- void SetupQueue() {
- try {
- if(_setup)
- return;
- if(!MessageQueue.Exists(this.MessageQueuePath))
- MessageQueue.Create(this.MessageQueuePath);
- _msmq = new MessageQueue();
- _msmq.Path = this.MessageQueuePath;
- _msmq.Formatter = _formater;
- IsAvailable = _msmq.CanWrite;
- }
- catch(Exception err) {
- SetupError = err;
- IsAvailable = false;
- throw;
- }
- finally {
- _setup = true;
- }
- }
- public override void Write(char[] buffer,int index,int count) {
- Send(new String(buffer,index,count));
- }
- public override void Write(string value) {
- Send(value);
- }
- public void Write(string value,MessagePriority priority) {
- Send(value,priority);
- }
- void Send(string value) {
- Send(value,MessagePriority.Normal);
- }
- void Send(string value,MessagePriority priority) {
- if(!_setup)
- SetupQueue();
- if(!IsAvailable) {
- return;
- }
- var message = new Message(value);
- message.Formatter = _formater;
- message.Priority = priority;
- _msmq.Send(message);
- }
- public void WritePurgeMessage() {
- if(!_setup)
- SetupQueue();
- if(!IsAvailable) {
- return;
- }
- string body = _msmq.Path + PURGE_TOKEN;
- var message = new Message(body);
- message.Formatter = _formater;
- message.Priority = MessagePriority.Highest;
- _msmq.Send(message);
- }
- public override Encoding Encoding {
- get { return Encoding.Default; }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment