2012-05-11 6 views
4

MSMQを初めて使用しており、XMLメッセージをリモートトランザクションキューに送信しようとしています。両方のマシンは2003サーバーです。私は非トランザクションのリモートキューで動作させることができます。私はメッセージがトランザクションキューに落ちるように見えることはできません。 C#コードは以下の通りです。 Idoはエラーを表示しません。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

問題は私がこのコードを変更するアクセス権を持っていないということです。私たちはサードパーティ製のアプリケーションを使用しています。私はこのコードスニペットを見直すように求めました。だから、私は本当にそれをテストすることはできません。私は自分のアプリケーションを作成し、これをテストすることができた、私は問題は、これはWebアプリケーションであると思うと私はそれが実行されているとリモートのキューにアクセスしようとしています。 – user1390125

+0

トランザクションキューが必要な理由は何ですか?第三者のソフトウェアを変更できない場合は、他にもできることはほとんどありません。 –

+0

'MessageQueueTransaction'は' IDisposable'なので、その使用法を 'using'ステートメントにラップするとよいでしょう。それに応じて私は答えを更新した。 –

関連する問題