チュートリアル : キューの作成とメッセージの使用

更新 : 2007 年 11 月

このトピックでは、MessageQueue コンポーネントを使用してメッセージ キューを作成するプロセスを示します。このコンポーネントを使用することにより、キューにメッセージを送信したり、キューからメッセージを取得したりできます。ここでは、メッセージにヘルプ要求を記録します。

メモ :

サーバー エクスプローラでキュー情報を表示したり、コードからキューにアクセスしたりするには、メッセージ キューという Windows コンポーネントをクライアント コンピュータにインストールする必要があります。このサービスを追加するには、[コントロール パネル] の [アプリケーションの追加と削除] を使用します。

メモ :

お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。

コンピュータにメッセージ キューを作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスで、Visual Basic または Visual C#Windows アプリケーションを作成します。MessageQ という名前を付けます。

  3. サーバー エクスプローラを開きます。詳細については、「方法 : サーバー エクスプローラ/データベース エクスプローラにアクセスして初期化する」を参照してください。

  4. [サーバー] ノードを展開します。

  5. ローカル サーバーのノードを展開します。ローカル サーバーのノードは、コンピュータ名によって識別されます。

  6. [メッセージ キュー] ノードを展開します。

  7. [専用キュー] を右クリックし、[キューの作成] をクリックします。

  8. キュー名として「HelpRequest」と入力します。[キューをトランザクション可能にする] チェック ボックスはオフにします。

  9. HelpRequest という名前の新しいプライベート キューが作成され、サーバー エクスプローラ に表示されます。

    メモ :

    新しく作成したキューは、[マイ コンピュータ] アイコンから表示することもできます。[マイ コンピュータ] を右クリックし、[管理] をクリックします。[サービスとアプリケーション] ノードを展開します。[メッセージ キュー] ノードを展開し、[専用キュー] フォルダをクリックします。新しいキューがキューの一覧に表示されます。

メッセージ キューに対して MessageQueue コンポーネントを追加するには

  1. サーバー エクスプローラ から HelpRequest キューをフォームにドラッグします。HelpRequest キューに対して構成された新しい MessageQueue コンポーネントが、プロジェクトに追加されます。

    この MessageQueue コンポーネントを使用すると、前のセクションで作成した HelpRequest キューに含まれるメッセージにプログラムからアクセスできます。

  2. MessageQueue コンポーネントの Name プロパティを helpRequestQueue に設定します。

  3. [プロパティ] ウィンドウで MessageReadPropertyFilter ノードを展開します。[優先順位] の値を true に設定します。これにより、メッセージがキューから取得されるときに、メッセージの優先順位が取得されるようになります。

    次の手順で作成するユーザー インターフェイスにより、ユーザーがヘルプ要求のテキストを入力し、メッセージの優先順位を設定できるようになります。ユーザーは、[送信] ボタンをクリックして要求をキューに送信します。DataGridView コントロールに、キューの内容が表示されます。このユーザー インターフェイスには、キューの現在の内容でグリッドを更新したり、キューの内容をパージしたりするためのボタンも含まれます。

ユーザー インターフェイスを作成するには

  1. ツールボックス の [Windows フォーム] タブから、次のコントロールを Form1 に追加します。

  2. 各コントロールのプロパティを次のように設定します。

    コントロール

    プロパティ

    新しい値

    Label1

    Text

    Name

    Label2

    Text

    Message

    TextBox1

    Name

    txtName

     

    Text

    (空白)

    TextBox2

    Name

    txtMessage

     

    Text

    (空白)

     

    Multiline

    true

    Button1

    Name

    sendMessage

     

    Text

    Send message

    Button2

    Name

    refreshMessages

     

    Text

    Refresh message list

    Button3

    Name

    purgeMessages

     

    Text

    Purge message list

    CheckBox1

    Name

    highPriority

     

    Text

    High priority

    DataGridView1

    Name

    messageGrid

  3. コントロールの配置を適切に調整します。

キューにメッセージを送信するには

  1. デザイナで、sendMessage ボタンをダブルクリックして、コード エディタに Click イベント ハンドラを作成します。

  2. 新しい Message インスタンスを作成してキューに送信し、メッセージの表示を更新するコードをメソッドに追加します。DisplayMessages メソッドは、次の手順で記述します。

    Private Sub sendMessage_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles sendMessage.Click
       Dim theMessage As System.Messaging.Message = _
          New System.Messaging.Message(Me.txtMessage.Text)
       theMessage.Label = Me.txtName.Text
       If highPriority.Checked Then
          theMessage.Priority = Messaging.MessagePriority.Highest
       Else
          theMessage.Priority = Messaging.MessagePriority.Normal
       End If
       helpRequestQueue.Send(theMessage)
       DisplayMessages()
    End Sub
    
    private void sendMessage_Click(object sender, System.EventArgs e)
    {
       System.Messaging.Message theMessage = 
          new System.Messaging.Message(txtMessage.Text);
       theMessage.Label = txtName.Text; 
       if (highPriority.Checked)
          theMessage.Priority = System.Messaging.MessagePriority.Highest;
       else
          theMessage.Priority = System.Messaging.MessagePriority.Normal;
       helpRequestQueue.Send(theMessage);
       DisplayMessages();
    }
    
  3. プロジェクトに System.Data への参照を追加します。Imports ステートメント (.NET 名前空間および型) (Visual Basic) を追加するか、System.Data に関する using (C# リファレンス) ステートメントを追加します。詳細については、「参照の管理」および「方法 : Visual Studio で参照を追加または削除する (Visual Basic)」を参照してください。

  4. キューの内容を DataGridView コントロールに表示するメソッドを追加します。このメソッドは、MessageQueue.GetAllMessages メソッドを使用してキューのすべてのメッセージを取得します。選択されたキュー プロパティが DataTable オブジェクトに追加されます。このオブジェクトは、DataGridView コントロールのデータ ソースとして使用されます。メッセージのテキストを取得するには、メッセージのフォーマッタを作成する必要があります。

    Private Sub DisplayMessages()
       ' Create a DataTable
       Dim messageTable As New DataTable()
       messageTable.Columns.Add("Name")
       messageTable.Columns.Add("Message")
       messageTable.Columns.Add("Priority")
       Dim messages() As System.Messaging.Message
       messages = helpRequestQueue.GetAllMessages()
       ' Need a formatter to get the text of the message body.
       Dim stringFormatter As System.Messaging.XmlMessageFormatter = _
          New System.Messaging.XmlMessageFormatter(New String() _
          {"System.String"})
       Dim index As Integer
       Dim am As System.Messaging.Message
       ' Add each message to the DataTable
       For index = 0 To messages.Length - 1
          messages(index).Formatter = stringFormatter
          am = messages(index)
          messageTable.Rows.Add(New String() _
             {am.Label, am.Body.ToString(), am.Priority.ToString()})
       Next
    
       messageGrid.DataSource = messageTable
    End Sub
    
    private void DisplayMessages()
    {
       DataTable messageTable = new DataTable();
       messageTable.Columns.Add("Name");
       messageTable.Columns.Add("Message");
       messageTable.Columns.Add("Priority");
       System.Messaging.Message[] messages;
       messages = helpRequestQueue.GetAllMessages();
       System.Messaging.XmlMessageFormatter stringFormatter;
       stringFormatter = new System.Messaging.XmlMessageFormatter(
          new string[] {"System.String"});
       for (int index = 0; index < messages.Length; index++) 
       {
          messages[index].Formatter = stringFormatter;
          messageTable.Rows.Add(new string[] {
             messages[index].Label,
             messages[index].Body.ToString(),
             messages[index].Priority.ToString() });
       }
       messageGrid.DataSource = messageTable;
    

    }

キューの内容を表示するには

  1. デザイナで、refreshMessage ボタンをダブルクリックして、コード エディタに Click イベント ハンドラを作成します。

  2. Click イベント ハンドラ内で DisplayMessages メソッドを呼び出します。

    Private Sub refreshMessages_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles refreshMessages.Click
       DisplayMessages()
    End Sub
    
    private void refreshMessages_Click(object sender, System.EventArgs e)
    {
       DisplayMessages();
    

    }

キューの内容を消去するには

  1. デザイナで、purgeMessage ボタンをダブルクリックして、コード エディタに Click イベント ハンドラを作成します。

  2. helpRequestQueue の Purge メソッドを呼び出し、DataGridView コントロールの内容を更新します。

    Private Sub purgeMessages_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles purgeMessages.Click
       helpRequestQueue.Purge()
       DisplayMessages()
    End Sub
    
    private void purgeMessages_Click(object sender, System.EventArgs e)
    {
       helpRequestQueue.Purge();
       DisplayMessages();
    

    }

アプリケーションをテストするには

  1. F5 キーを押してアプリケーションを実行します。

  2. 自分の名前と短いメッセージを入力します。

  3. [メッセージの送信] をクリックして、メッセージをキューに送信し、表示を更新します。

  4. [メッセージの削除] をクリックして、キューに含まれるすべてのメッセージを削除します。メッセージの一覧は空になります。

参照

処理手順

方法 : キューを作成する

方法 : MessageQueue コンポーネントのインスタンスを作成する

方法 : 単純なメッセージを送信する

方法 : メッセージを取得する

概念

メッセージングの概要

その他の技術情報

メッセージング コンポーネントの使用