次の方法で共有


方法 : メッセージをピークする

更新 : 2007 年 11 月

Peek メソッドを使用して、キューの最初のメッセージをキューから削除せずに参照できます。これにより、コンポーネントは、ほかのアプリケーションやコンポーネントがメッセージを取得するのを妨げることなく、キューからそのメッセージの情報を取得できます。

5tete99e.alert_note(ja-jp,VS.90).gifメモ :

Peek では、キューの最初のメッセージだけを参照できます。ピークしたメッセージはキューから削除されないため、2 番目以降のメッセージをピークすることはできません。キュー内のすべてのメッセージをキューから削除せずに参照する場合は、GetAllMessages メソッドまたは GetMessageEnumerator メソッドを使用できます。詳細については、「キューおよびメッセージのコレクション」を参照してください。

Peek メソッドを呼び出したときにキューにメッセージがない場合、メソッドはメッセージが到着するまで待ちます。メソッドが指定された時間だけ待つようにする場合は、タイムアウト期限を指定します。タイムアウト期限は、TimeSpan オブジェクトとして指定されます。一般に、タイムアウト期限はゼロまたは既定の無期限に設定します。ゼロの場合は、メッセージを確認した後まったく待ちません。既定の設定の場合は、無期限に待ちます。これは、コードで次の構文を使用して設定します。

msg.TimeToBeReceived = System.Messaging.Message.InfiniteTimeout
     msg.TimeToBeReceived = System.Messaging.Message.InfiniteTimeout;
msg.set_TimeToBeReceived(System.Messaging.Message.InfiniteTimeout);

また、[プロパティ] ウィンドウで TimeToBeReceived プロパティを設定することによっても設定できます。

5tete99e.alert_note(ja-jp,VS.90).gifヒント :

依存型クライアントを使用している場合は、クライアント コンピュータ上のクロックが、メッセージ キューが動作しているサーバー上のクロックと同期していることを確認してください。同期していない場合は、TimeToBeReceived プロパティが InfiniteTimeout に設定されていないメッセージを送信するときに、予期しない結果になる可能性があります。

ピークは、同期または非同期で実行できます。詳細については、「方法 : メッセージを非同期で取得する」を参照してください。

同期してメッセージをピークするには

  1. MessageQueue コンポーネントのインスタンスを作成し、その Path プロパティに、参照するキューを設定します。詳細については、「方法 : MessageQueue コンポーネントのインスタンスを作成する」を参照してください。

  2. Peek メソッドによってキューからコピーされたデータを保持する Message オブジェクトのインスタンスを作成します。

  3. Peek メソッドを呼び出して、キューの最初のメッセージに関するデータを取得します。オプションとして、Peek メソッドにタイムアウトを指定する場合は、メソッドが待機する時間の長さ (TimeSpan オブジェクト) をメソッドの引数として指定します。

    次のコードは、Peek メソッドを使用して、キューの最初のメッセージに関する情報を取得して表示する方法を示しています。

    Public Sub LookFirstMessage()
        Dim NewQueue As New System.Messaging.MessageQueue(".\MyQueue")
        Dim FirstMessage As System.Messaging.Message
        FirstMessage = NewQueue.Peek
        Dim targetNames() As String = {"System.String,mscorlib"}
        FirstMessage.Formatter = _
           New System.Messaging.XmlMessageFormatter(targetNames)
        Dim label As String = CStr(FirstMessage.Label)
    End Sub
    
     public void LookFirstMessage()
        {
            System.Messaging.MessageQueue newQueue =
               new System.Messaging.MessageQueue(".\\MyQueue");
            System.Messaging.Message firstMessage;
            string[] types = { "System.String,mscorlib" };
            firstMessage = newQueue.Peek();
            firstMessage.Formatter =
               new System.Messaging.XmlMessageFormatter(types);
            string label = firstMessage.Label.ToString();
        }
    

参照

処理手順

方法 : プログラムでメッセージを取得する

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

その他の技術情報

メッセージの読み取りと受信