Transaction 을 이용한 Queue의 경우에는 SendMsgQueueTran을 이용하여 보내야 된다.
using System;
using System.Collections.Generic;
using System.Text;
using System.Messaging;
namespace Utils
{
public class MsgQueueHandler
{
public MsgQueueHandler()
{
}
#region Instance Variables
#endregion
#region Properties
#endregion
#region Initialize and Shutdown methods
#endregion
#region Methods
/// <summary>
/// Message Object를 만든다.
/// </summary>
/// <param name="strMsgText">Message 본문</param>
/// <param name="strMsgLabel">Message Label</param>
/// <returns>Message Object</returns>
#region // Message SetMessageObject(string strMsgText, string strMsgLabel) //
private Message SetMessageObject(string strMsgText, string strMsgLabel)
{
Message msg = new Message(strMsgText);
msg.Label = strMsgLabel;
msg.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
return msg;
}
#endregion
/// <summary>
/// Message를 트렌젝션을 이용하여 Queue에 보낸다.
/// </summary>
/// <param name="strMsgText">보낼 Message</param>
/// <param name="strMsgLabel">보낸 Message Label</param>
/// <param name="strQueueName">Queue의 이름</param>
/// <returns>성공 여부</returns>
#region // bool SendMsgQueueTran(string strMsgText, string strMsgLabel, string strQueueName) //
public bool SendMsgQueueTran(string strMsgText, string strMsgLabel, string strQueueName)
{
bool returnBoolen = false;
MessageQueueTransaction mqTran = new MessageQueueTransaction();
try
{
mqTran.Begin();
using (MessageQueue mq = new MessageQueue(strQueueName))
{
using (Message msg = SetMessageObject(strMsgText, strMsgLabel))
{
string strData = (string)msg.Body;
mq.Send(strData, msg.Label, mqTran);
returnBoolen = true;
}
}
}
catch (System.Threading.ThreadAbortException)
{
//쓰래드 중단 오류는 다시 작업하기 위해서 큐를 복원한다.
mqTran.Abort();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (mqTran.Status == MessageQueueTransactionStatus.Pending) mqTran.Commit();
if (mqTran != null) mqTran.Dispose();
}
return returnBoolen;
}
#endregion
/// <summary>
/// Message를 Queue에 보낸다.
/// </summary>
/// <param name="strMsgText">보낼 Message</param>
/// <param name="strMsgLabel">보낸 Message Label</param>
/// <param name="strQueueName">Queue의 이름</param>
/// <returns>성공 여부</returns>
#region // bool SendMsgQueue(string strMsgText, string strMsgLabel, string strQueueName) //
public bool SendMsgQueue(string strMsgText, string strMsgLabel, string strQueueName)
{
bool returnBoolen = false;
try
{
using (MessageQueue mq = new MessageQueue(strQueueName))
{
using (Message msg = SetMessageObject(strMsgText, strMsgLabel))
{
mq.Send(msg);
returnBoolen = true;
}
}
}
catch (Exception ex)
{
throw ex;
}
return returnBoolen;
}
#endregion
#endregion
#region Event Handlers
#endregion
}
}