HOW TO:擷取訊息
更新:2007 年 11 月
可以使用靜態或動態擷取機制擷取訊息的清單。當您擷取訊息的靜態清單時,系統會傳回 Message 物件的陣列,代表佇列中的所有訊息。
當您擷取訊息的動態清單時,系統會傳回 MessageEnumerator 物件,代表佇列中的所有訊息。MessageEnumerator 物件是初始化為動態清單標頭的資料指標。清單順序與佇列中的訊息順序相同,都是根據訊息優先權來排列。您可以呼叫 MoveNext 方法,將資料指標移至佇列中的第一個訊息。在初始化列舉值之後,您可以使用 MoveNext,繼續移至剩餘的訊息。您可將逾時傳遞至 MoveNext 方法來指定是否要等候取得訊息。
由於列舉值是動態的,因此它可存取附加在資料指標目前位置之後的訊息 (例如因低優先權之故)。列舉值無法存取插入在資料指標目前位置之前的訊息。無法使用 MessageEnumerator 反向移動。資料指標只允許順向移動。Reset 方法能讓您將資料指標放回佇列的開頭。
注意事項: |
---|
如果您將 MessageQueue 執行個體化且 DenySharedReceive 設定為 true,則當您連接佇列時,其他應用程式都不可修改列舉值中的訊息。 |
若要擷取訊息的靜態清單
建立 MessageQueue 元件的執行個體,並將其 Path 屬性設定為您要參考的佇列。如需詳細資訊,請參閱 HOW TO:建立 MessageQueue 元件執行個體。
注意事項: 如果是從 [伺服器總管] 建立元件,則 Path 屬性會自動設定為該佇列的佇列路徑。
建立參考 Message 類別的陣列儲存您的查詢結果。
呼叫 GetAllMessages 方法。
將結果指派至您建立的陣列。
下列程式碼將說明如何使用 GetAllMessages 函式,從佇列擷取訊息,並在清單方塊中顯示訊息標籤。這個範例會假設已將 MessageQueue 元件執行個體加入至應用程式。
Private Sub button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles button1.Click Me.MessageQueue1.Path = ".\MyQueue" Dim msg() As System.Messaging.Message Dim i As Integer ' Retrieve the messages. msg = MessageQueue1.GetAllMessages() ' Clear the current contents of the list. Me.ListBox1.Items.Clear() ' Display the results. For i = 0 To msg.Length - 1 Me.ListBox1.Items.Add(msg(i).Label) Next End Sub
private void button1_Click(System.Object sender, System.EventArgs e) { messageQueue1.Path = ".\\MyQueue"; System.Messaging.Message[] msg; // Retrieve the messages. msg = messageQueue1.GetAllMessages(); // Clear the current contents of the list. this.listBox1.Items.Clear(); // Display the results. for (int i = 0; i < msg.Length; i++) { this.listBox1.Items.Add(msg[i].Label); } }
這個程式碼範例也可以當做 IntelliSense 程式碼片段使用。在程式碼片段選擇器中,它位於 [Windows 作業系統] > [訊息佇列] 中。如需詳細資訊,請參閱 HOW TO:在您的程式碼中插入程式碼片段 (Visual Basic)。
若要擷取訊息的動態清單
建立 MessageQueue 元件的執行個體,並將其 Path 屬性設定為您要參考的佇列。如需詳細資訊,請參閱 HOW TO:建立 MessageQueue 元件執行個體。
注意事項: 如果是從 [伺服器總管] 建立元件,則 Path 屬性會自動設定為該佇列的佇列路徑。
建立 MessageEnumerator 物件儲存您的查詢結果。
呼叫 MessageQueue 類別中的 GetEnumerator 方法。
將結果指派至 MessageEnumerator 物件。程式碼可能會像這樣子:
Dim mq As New System.Messaging.MessageQueue(".\MyQueue") Dim msgEnum As System.Messaging.MessageEnumerator msgEnum = CType(mq.GetMessageEnumerator2, System.Messaging.MessageEnumerator)
System.Messaging.MessageQueue mq = new System.Messaging.MessageQueue(); System.Messaging.MessageEnumerator msgEnum; mq.Path = @".\MyQueue"; msgEnum = (System.Messaging.MessageEnumerator)(mq.GetMessageEnumerator2());