方法 : メッセージをピークする
更新 : 2007 年 11 月
Peek メソッドを使用して、キューの最初のメッセージをキューから削除せずに参照できます。これにより、コンポーネントは、ほかのアプリケーションやコンポーネントがメッセージを取得するのを妨げることなく、キューからそのメッセージの情報を取得できます。
メモ : |
---|
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 プロパティを設定することによっても設定できます。
ヒント : |
---|
依存型クライアントを使用している場合は、クライアント コンピュータ上のクロックが、メッセージ キューが動作しているサーバー上のクロックと同期していることを確認してください。同期していない場合は、TimeToBeReceived プロパティが InfiniteTimeout に設定されていないメッセージを送信するときに、予期しない結果になる可能性があります。 |
ピークは、同期または非同期で実行できます。詳細については、「方法 : メッセージを非同期で取得する」を参照してください。
同期してメッセージをピークするには
MessageQueue コンポーネントのインスタンスを作成し、その Path プロパティに、参照するキューを設定します。詳細については、「方法 : MessageQueue コンポーネントのインスタンスを作成する」を参照してください。
Peek メソッドによってキューからコピーされたデータを保持する Message オブジェクトのインスタンスを作成します。
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 コンポーネントのインスタンスを作成する