- PR -

メッセージキューが送信できない現象について

1
投稿者投稿内容
勇気
会議室デビュー日: 2004/09/22
投稿数: 11
投稿日時: 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 ) ) 」にてメッセージキューが作成
されていることは確認できました。
同じパスのメッセージキューに対しメッセージの送信を行っているにもかかわらずキューイングされない
とう現象が納得できずに困っております。
それとも、これはそういうものなのでしょうか。。。


よろしくお願いいたします。

なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-05-27 14:13
引用:

勇気さんの書き込み (2005-05-27 13:25) より:
同じパスのメッセージキューに対しメッセージの送信を行っているにもかかわらずキューイングされない
とう現象が納得できずに困っております。
それとも、これはそういうものなのでしょうか。。。


送受信のタイミングがどうなっているのか良く分かりませんが、キューを削除する際に既に受信してしまっていてメッセージごと消してるとかってオチはないですか?

※メッセージキューは詳しくないんですが、そもそもこんな使い方するものじゃないのでは(キューの意味なし)?
勇気
会議室デビュー日: 2004/09/22
投稿数: 11
投稿日時: 2005-05-27 14:33
なちゃ様
返信ありがとうございます。

ステップ実行にて受信側で受信する前で止めておき、
送信側からメッセージを送信した場合もキューイングされていませんでしたので
メッセージごと消しているということはないと思います。

※説明不足ですみません。
ソース自体は説明用に簡略化したもので実際には受信側では
受信後にキューを削除しているのではなく別のタイミングで
削除を行っています。

1.受信側、メッセージ受信開始(受信待ち)

2.送信側、メッセージ送信

3.1,2を繰り返した後、受信側にてメッセージキューの削除を行う。

1から3を繰り返すとして、二回目の2.にてメッセージにキューされない
現象が発生します。
1

スキルアップ/キャリアアップ(JOB@IT)