다음을 통해 공유


방법: 메시지 검색

업데이트: 2007년 11월

정적 또는 동적 검색 메커니즘을 사용하여 메시지 목록을 검색할 수 있습니다. 정적 메시지 목록을 검색하는 경우 큐의 모든 메시지를 나타내는 Message 개체의 배열이 시스템에서 반환됩니다.

동적 메시지 목록을 검색하는 경우 큐의 모든 메시지를 나타내는 MessageEnumerator 개체가 시스템에서 반환됩니다. MessageEnumerator 개체는 동적 목록의 헤드로 초기화된 커서입니다. 이때 목록 순서는 메시지 우선 순위에 따라 큐의 메시지 순서와 동일합니다. MoveNext 메서드를 호출하여 커서를 큐의 첫 번째 메시지로 이동할 수 있습니다. 열거자가 초기화된 다음 MoveNext를 사용하여 다음 메시지로 계속 이동할 수 있고 MoveNext 메서드로 시간 제한이 전달되어 메시지를 사용할 수 있게 될 때까지 기다릴지 여부를 지정할 수 있습니다.

열거자는 동적이므로 낮은 우선 순위 등의 이유로 커서의 현재 위치에서 벗어나 추가된 메시지에 액세스할 수 있지만 커서의 현재 위치 앞에 삽입된 메시지에는 액세스할 수 없습니다. MessageEnumerator를 사용하여 뒤로 이동하는 것은 불가능합니다. 커서는 앞으로만 이동할 수 있습니다. Reset 메서드를 사용하면 커서를 큐의 시작 위치에 다시 놓을 수 있습니다.

참고:

DenySharedReceive가 true로 설정된 MessageQueue를 인스턴스화한 경우에는 이를 인스턴스화한 사용자가 큐에 연결되어 있는 동안 다른 응용 프로그램에서 해당 열거형의 메시지를 수정할 수 없습니다.

정적 메시지 목록을 검색하려면

  1. MessageQueue 구성 요소의 인스턴스를 만들고 Path 속성을 참조할 큐로 설정합니다. 자세한 내용은 방법: MessageQueue 구성 요소 인스턴스 만들기를 참조하십시오.

    참고:

    서버 탐색기에서 구성 요소를 만든 경우 Path 속성은 자동으로 해당 큐의 큐 경로로 설정됩니다.

  2. 쿼리 결과를 보관할 Message 클래스를 참조하는 배열을 만듭니다.

  3. GetAllMessages 메서드를 호출합니다.

  4. 만든 배열에 결과를 할당합니다.

    다음 코드에서는 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 운영 체제 > 메시지 큐에 있습니다. 자세한 내용은 방법: 사용자 코드에 코드 조각 삽입(Visual Basic)을 참조하십시오.

동적 메시지 목록을 검색하려면

  1. MessageQueue 구성 요소의 인스턴스를 만들고 Path 속성을 참조할 큐로 설정합니다. 자세한 내용은 방법: MessageQueue 구성 요소 인스턴스 만들기를 참조하십시오.

    참고:

    서버 탐색기에서 구성 요소를 만든 경우 Path 속성은 자동으로 해당 큐의 큐 경로로 설정됩니다.

  2. 쿼리 결과를 보관할 MessageEnumerator 개체를 만듭니다.

  3. MessageQueue 클래스의 GetEnumerator 메서드를 호출합니다.

  4. 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());
    
    

참고 항목

작업

방법: 큐 검색

개념

큐와 메시지 컬렉션