- - PR -
メッセージキューが送信できない現象について
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2005-05-27 13:25
Microsoft Visual C# .NET 2003
.NET Framework 1.1 version 1.1.4322.573 Windows XP Professional SP2 メッセージキューについて質問があります。 ご存知の方がおられましたらご教授ください。 メッセージキューを使用しプロセス間通信を行うアプリケーションを作成しています。 送信用プロセスと受信用プロセスの二つのアプリケーションで通信を行っています。 処理は以下のとおりです。 ・送信プロセス、メッセージキュー送信処理 private const string mqPath = ".\\Private$\\MyMessageQueue"; /// <summary> /// メッセージキュー送信処理 /// </summary> /// <param name="msg">送信メッセージ</param> private void MessageQueueSend( string msg ) { try { MessageQueue mq = null; // メッセージキューを作成する if ( !MessageQueue.Exists( mqPath ) ) MessageQueue.Create( mqPath ); mq = new MessageQueue( mqPath ); // 送信 System.Messaging.Message myMessage = new System.Messaging.Message(); myMessage.Label = msg; myMessage.Priority = MessagePriority.Normal; mq.Send( myMessage ); myMessage.Dispose(); mq.Dispose(); } catch( Exception ) { } finally { this.MessageQueueDelete(); this.PutLog( "MessageQueueDelete" ); } } ・受信プロセス、メッセージキュー受信処理 private const string mqPath = ".\\Private$\\MyMessageQueue"; /// <summary> /// メッセージキュー受信処理 /// </summary> /// <param name="msg">受信メッセージ</param> private void MessageQueueReceive( ref string msg ) { msg = string.Empty; try { MessageQueue mq = null; // メッセージキューを作成する if ( !MessageQueue.Exists( mqPath ) ) MessageQueue.Create( mqPath ); mq = new MessageQueue( mqPath ); // 受信 System.Messaging.Message myMessage = new System.Messaging.Message(); try { myMessage = mq.Receive(); msg = myMessage.Label; } catch( Exception ) { msg = "受信失敗"; } myMessage.Dispose(); mq.Dispose(); } catch( Exception ) { } finally { // メッセージキューを削除する if ( MessageQueue.Exists( mqPath ) ) MessageQueue.Delete( mqPath ); } } 上記処理にて、受信プロセスでは受信処理をコールしメッセージ受信待ち状態にしておき 送信プロセスにて送信処理をコールしメッセージを送信すると受信処理でそのメッセージを受信します。 しかし、もう一度受信処理をコールし、メッセージの送信を行ってもメッセージの受信は行われません。 デバッグをした結果、送信処理に成功(異常が発生しなかったという意味で)しているのですが、 管理ツール、コンピューターの管理にてメッセージを確認するとメッセージが溜まっていない状態でした。 また、受信処理にてメッセージキューの削除処理を行わない場合は正常にメッセージの通信が行えます。 ここで質問なのですが、受信処理にて受信完了後メッセージキューの削除は行っていますが 再度受信する際に同じパスにてメッセージキューを作成しています。 送信する際に送信処理内のif文「if ( !MessageQueue.Exists( mqPath ) ) 」にてメッセージキューが作成 されていることは確認できました。 同じパスのメッセージキューに対しメッセージの送信を行っているにもかかわらずキューイングされない とう現象が納得できずに困っております。 それとも、これはそういうものなのでしょうか。。。 よろしくお願いいたします。 | ||||
|
投稿日時: 2005-05-27 14:13
送受信のタイミングがどうなっているのか良く分かりませんが、キューを削除する際に既に受信してしまっていてメッセージごと消してるとかってオチはないですか? ※メッセージキューは詳しくないんですが、そもそもこんな使い方するものじゃないのでは(キューの意味なし)? | ||||
|
投稿日時: 2005-05-27 14:33
なちゃ様
返信ありがとうございます。 ステップ実行にて受信側で受信する前で止めておき、 送信側からメッセージを送信した場合もキューイングされていませんでしたので メッセージごと消しているということはないと思います。 ※説明不足ですみません。 ソース自体は説明用に簡略化したもので実際には受信側では 受信後にキューを削除しているのではなく別のタイミングで 削除を行っています。 1.受信側、メッセージ受信開始(受信待ち) 2.送信側、メッセージ送信 3.1,2を繰り返した後、受信側にてメッセージキューの削除を行う。 1から3を繰り返すとして、二回目の2.にてメッセージにキューされない 現象が発生します。 | ||||
1
