1

ユーザーが操作するasp.net Webフォームアプリケーションがあります。ユーザーがサイトから特定のアイテムを選択し、処理のためにボタンをクリックしたとき。webapp は、ユーザーが選択した項目ごとに msmq にメッセージを追加します。

私が理解しようとしている部分:

ジョブがキュー (msmq) を処理する場合、2 番目のアプリケーションはどのタイプのアプリケーションにする必要がありますか。重要なのは、この 2 番目のアプリケーションは、asp.net webapp が [プロセス] ボタンがクリックされたことを通知するまでアイドル状態にしておく必要があるということです。その後、先に進み、キューをチェックして処理します。コマンドでのみキューをチェックするだけで、1分ごとにキューを常にチェックしたくありません。

Windows サービス、Web サービス、Web API? 現在、30 秒ごとにキューをチェックする Windows サービスがあります。常にチェックするのではなく、オンデマンドで動作させるにはどうすればよいですか?

ここでは、わずかに異なる言い方をしています。

  1. ユーザーは .NET アプリケーションでアイテムを選択し、[プロセス] をクリックします。

  2. .Net アプリケーションは、処理が必要なアイテムをキュー (msmq) に追加します。

  3. 追加のアプリケーションは、プロセス ボタンがクリックされ、キューの処理を開始する必要があることを .NET アプリケーションから通知されます。キューが処理されると、追加のアプリケーションはある種のアイドル モードに戻る必要があります。

ここで最も重要なことは、キューに項目があるかどうかを毎分チェックするタイマーを使用したくないということです。これにより、24 時間年中無休で実行されているリソースが消費されます。

msmq の特定の機能に慣れていない可能性があります。msmq がキューでメッセージを受信したことをサービスに伝え、先に進んでそれらを処理する方法はありますか。私の .net アプリケーションがサービスと通信するのではなく?

4

1 に答える 1

1

既存の Windows サービスを使用できます。しかし、約 30 秒ごとにキューをチェックする代わりに、メッセージが到着したときにのみ応答するリスナーをキューに追加してみませんか。以下のスニペットを確認してください。

static void Main(string[] args)
{
    //create an event
    MessageQueue msmq = new MessageQueue("queuename");
    //subscribe to the event
    msmq.ReceiveCompleted += msmq_ReceiveCompleted;
    //start listening
    msmq.BeginReceive();
}

//this will be fired everytime a message is received
static void msmq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
    //get the MessageQueue that we used 
    MessageQueue msmq = sender as MessageQueue;

    //read the message
    //and process it
    Message msg = msmq.EndReceive(e.AsyncResult);

    //because this method is only fired once everytime
    //a message is sent to the queue
    //we have to start listening again            
    msmq.BeginReceive();
}
于 2015-09-28T05:27:46.423 に答える