Скажем, я пытаюсь отправить аутентифицированную транзакционную очередь,Message Queue (MSMQ) не выбрасывает исключение, если сообщение не получен на другом конце
по телефону msg.send (объект, MessageQueueTransactionType.Single), сообщение не получает в транзакционной очереди, исключение не выбрано.
Что я хочу достичь после отправки , если сообщение не удается отправить, выполнить некоторую функцию и прервать транзакцию, но она не генерирует исключение, поэтому я не могу ее обработать.
Я отправляю объект из веб-приложения в локальной локальной очереди сообщений.
Мой код выглядит следующим образом в моем веб-приложение:
MessageQueueTransaction mqTran=new MessageQueueTransaction();
try
{
using(System.Messaging.Message msg=new System.Messaging.Message(){
mqTran.Begin();
MessageQueue adminQ = new MessageQueue(AdminQueuePath);
MessageQueue msgQ = new MessageQueue(queuePath);
msgQ.DefaultPropertiesToSend.Recoverable = true;
msg.body = object;
msg.Recoverable=true;
msg.Label="Object";
msg.TimeToReachQueue=new TimeSpan(0,0,30);
msg.AcknowledgeType=AcknowledgeTypes.FullReachQueue;
msg.ResponseQueue=adminQ;
msg.AdministrationQueue=adminQ;
msgQ1.Send(msg,MessageQueueTransactionType.Single);
mqTran.Commit();
}
catch(Exception e)
{
mqTran.Abort();
//Do some processing if fail to send
}
«Я отправляю объект из веб-приложения в локальной локальной очереди сообщений». Означает ли это, что отправляющее приложение и принимающая очередь находятся на одной машине? –
Да, они находятся на одной машине, поэтому я должен реализовать MSMQ или сгенерировать свой самогенерируемый класс очереди? – user1663380
MSMQ в порядке. Просто основной процесс очень отличается. Например, нет исходящих очередей. A Send() отправит сообщение в очередь назначения напрямую, а не в промежуточную исходящую очередь для последующей доставки. Если вы не можете отправить сообщение, вы получите исключение немедленно. Ваша попытка/улов должна быть вокруг send(). –