2012-05-11 5 views
4

Я новичок в MSMQ и пытаюсь отправить XML-сообщение в удаленную транзакционную очередь. Обе машины - сервер 2003 года. Я могу заставить его работать с не транзакционной удаленной очередью. Кажется, я не могу передать сообщения в транзакционную очередь. Код C# приведен ниже. Идо не получить ошибку, она просто не появляется.Отправка MSMQ MEssage в удаленную транзакционную очередь

Message rqMessage = new Message(); 
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof([message type])); 

XmlTextWriter writer = new XmlTextWriter(rqMessage.BodyStream, Encoding.UTF8); 
ser.Serialize(writer, rqDoc); 
rqMessage.Label = "message label"; 
rqMessage.TimeToBeReceived = Message.InfiniteTimeout; 
rqMessage.TimeToReachQueue = Message.InfiniteTimeout; 
rqMessage.ResponseQueue = new MessageQueue("Path"); 
rqMessage.Formatter = new ActiveXMessageFormatter(); 
MessageQueue rqQueue = new MessageQueue(nodeRequestQueue.SelectSingleNode("Path").InnerText); 

bool transactional = false; 
try 
{ 
    transactional = rqQueue.Transactional; 
} 
catch(MessageQueueException) 
{ 
    transactional = false; 
} 
if (transactional) 
    rqQueue.Send(rqMessage, MessageQueueTransactionType.Single); 
else 
    rqQueue.Send(rqMessage); 

ответ

4

Вы можете создать транзакцию явно.

using (var transaction = new MessageQueueTransaction()) 
{ 
    transaction.Begin(); 
    rqQueue.Send(rqMessage, transaction); 
    transaction.Commit(); 
} 

Для перегрузки вы используете, возможно, вы не имеете «прямое имя формата» и эта опция не поддерживается. MSDN

+0

Проблема у меня в том, что у меня нет доступа для изменения этого кода. Мы используем стороннее приложение, и я попросил их прочитать этот фрагмент кода. Поэтому я не могу это проверить. Я смог написать собственное приложение и протестировать его, я считаю, что проблема в том, что это веб-приложение, и я не уверен, какой пользователь он запускает и пытается получить доступ к удаленной очереди. – user1390125

+0

Есть ли какая-то конкретная причина, почему вам нужна транзакционная очередь? Если вы не можете изменить программное обеспечение 3rdparty, вы не можете многое сделать. –

+0

Поскольку 'MessageQueueTransaction' является' IDisposable', рекомендуется использовать его в 'using'. Я обновил ответ соответственно. –

Смежные вопросы