次の方法で共有


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

[このドキュメントはプレビュー版であり、後のリリースで変更されることがあります。 空白のトピックは、プレースホルダーとして挿入されています。]

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

注意

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

注意

お使いのマシンで、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. helpRequestQueue の するには、 MessageQueue コンポーネントの (名) プロパティを設定します。

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

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

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

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

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

    コントロール

    プロパティ

    新しい値

    Label1

    Text

    名前

    Label2

    Text

    メッセージ

    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
       EndIf
       helpRequestQueue.Send(theMessage)
       DisplayMessages()
    EndSub
    
    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# Reference) ステートメントを追加します。 詳細については、「参照の管理」および「方法 : 追加または Visual Studio での参照を削除」を参照してください。

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

                                Private
                                Sub DisplayMessages()
       ' Create a DataTableDim messageTable AsNew 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({"System.String"})
       Dim index AsIntegerDim am As System.Messaging.Message
       ' Add each message to the DataTableFor index = 0 To messages.Length - 1
          messages(index).Formatter = stringFormatter
          am = messages(index)
          messageTable.Rows.Add({am.Label, 
                                 am.Body.ToString(), 
                                 am.Priority.ToString()})
       Next
    
       messageGrid.DataSource = messageTable
    EndSub
    
    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()
    EndSub
    
    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()
    EndSub
    
    private void purgeMessages_Click(object sender, System.EventArgs e)
    {
       helpRequestQueue.Purge();
       DisplayMessages();
    

    }

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

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

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

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

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

参照

処理手順

方法 : キューを作成します。

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

方法 : 単純なメッセージを送信します。

方法 : メッセージを取得します。

概念

メッセージングの概要

その他の技術情報

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