1

メッセージキュー(MSMQ)をリッスンして処理するWindowsサービスを.Net2.0で作成したいと思います。

車輪の再発明ではなく、誰かがそれを行うための最良の方法の例を投稿できますか?一度に1つずつ処理するだけでよく、並行して処理する必要はありません(スレッドなど)。

基本的に、キューをポーリングする必要があります。そこに何かがある場合は、それを処理し、キューから取り出して繰り返します。これもシステム効率の良い方法でやりたいと思っています。

提案をありがとう!

4

2 に答える 2

4

http://msdn.microsoft.com/en-us/library/ms751514.aspxでWCFの例を確認してください。

編集:私の答えは、.Net2.0を使用して指定する編集の前に与えられたことに注意してください。私はまだWCFが進むべき道だと思いますが、少なくとも.NET3.0が必要になります。

于 2009-02-23T01:47:34.127 に答える
4

上記を行うには、いくつかの異なる方法があります。メッセージをポーリングするのではなく、メッセージが利用可能になったときに通知されるように、メッセージキューにイベントを設定することをお勧めします。

メッセージキューの使用の簡単な例はhttp://www.codeproject.com/KB/cs/mgpmyqueue.aspxであり、イベントなどを添付するためのMSDNドキュメントは http://msdn.microsoft.com/en-us/にあります。 library / system.messaging.messagequeue_events.aspx

ここからのMicrosoftの例:

           ....
           // Create an instance of MessageQueue. Set its formatter.
           MessageQueue myQueue = new MessageQueue(".\\myQueue");
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(String)});

            // Add an event handler for the ReceiveCompleted event.
            myQueue.ReceiveCompleted += new 
                ReceiveCompletedEventHandler(MyReceiveCompleted);

            // Begin the asynchronous receive operation.
            myQueue.BeginReceive();
            ....


        private static void MyReceiveCompleted(Object source, 
            ReceiveCompletedEventArgs asyncResult)
        {
            // Connect to the queue.
            MessageQueue mq = (MessageQueue)source;

            // End the asynchronous Receive operation.
            Message m = mq.EndReceive(asyncResult.AsyncResult);

            // Display message information on the screen.
            Console.WriteLine("Message: " + (string)m.Body);

            // Restart the asynchronous Receive operation.
            mq.BeginReceive();

            return; 
        }
于 2009-02-23T02:15:48.490 に答える