msmq メッセージを追加する wcf サービスがあります。プライベート キューからメッセージを読み取り、メッセージを処理する Windows リスナーもあります。
protected override void OnStart(string[] args)
{
// initialises the queue and sets QueueAccessMode.Receive
MessageQueue queue...;
queue.ReceiveCompleted += ProcessEvent;
queue.BeginReceive();
}
public void ProcessEvent(Object source, ReceiveCompletedEventArgs asyncResult)
{
MessageQueue queue = (MessageQueue)source;
try
{
Message msg = queue.EndReceive(asyncResult.AsyncResult);
msg.Formatter = new XmlMessageFormatter(new[] { typeof(MyEvent) });
try
{
MyEvent e = (MyEvent) msg.Body;
Process(e);
}catch(exception e)
{
HandleMessageFault(msg, queue);
// how can i put this message back in the queue or another queue at this point?
// will the msmq put it back in the queue automatically ?
}
}
catch()
{
// or how to handle here ?
}
}
メッセージを同じキューに戻そうとしましたが、機能していないように見えますが、エラーも発生しません
private void HandleMessageFault(Message message, MessageQueue currentQueue)
{
message.AppSpecific++;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
currentQueue.Send(message);
scope.Complete();
}
}