次の方法で共有


Message.Id プロパティ

メッセージの ID を取得します。

Public ReadOnly Property Id As String
[C#]
public string Id {get;}
[C++]
public: __property String* get_Id();
[JScript]
public function get Id() : String;

プロパティ値

メッセージの一意の ID。メッセージ キューによって生成されます。

例外

例外の種類 条件
InvalidOperationException メッセージは送信されていません。このプロパティは、キューから取得したメッセージでだけ読み込むことができます。

または

フィルタ処理されたメッセージ キューが、 Id プロパティを無視します。

解説

メッセージの送信時に、メッセージ キューはメッセージ ID を生成します。ID は 20 バイトで構成され、送信元コンピュータのマシン Guid と、コンピュータ上でのメッセージの一意の ID という 2 つの項目を含みます。この 2 つの項目の組み合わせにより、ネットワーク上で一意のメッセージ ID が生成されます。

メッセージ キューは、受信確認メッセージやレポート メッセージを含めたすべてのメッセージについてメッセージ ID を生成します。通常、受信確認メッセージは、送信された元のメッセージの到達または失敗に対する応答としてメッセージ キューによって送信されます。元のメッセージの Id プロパティ値は、受信確認メッセージの CorrelationId プロパティの中にあります。

また Id プロパティは、応答メッセージを応答キューに送信するときにも使用できます。応答メッセージに元のメッセージ ID を含めるには、応答メッセージの CorrelationId プロパティを、元のメッセージの Id プロパティに設定します。こうすると、応答メッセージを読み取るアプリケーションは、応答メッセージの相関関係 ID を使って元のメッセージを識別できます。

使用例

[Visual Basic, C#, C++] オーダーを含んでいるメッセージをキューに送信し、またオーダーを含んでいるメッセージをキューから受信する例を次に示します。これは特に、元のメッセージがキューに到着するか、元のメッセージがキューから取得されたときに、肯定受信確認を要求します。

 
Imports System
Imports System.Messaging


Namespace MyProject
    _
   
   '/ <summary>
   '/ Provides a container class for the example.
   '/ </summary>
   Public Class MyNewQueue
      
      
      '**************************************************
      ' Provides an entry point into the application.
      '         
      ' This example sends and receives a message from
      ' a queue.
      '**************************************************
      Public Shared Sub Main()
         ' Create a new instance of the class.
         Dim myNewQueue As New MyNewQueue()
         
         ' Create new queues.
         CreateQueue(".\myQueue")
         CreateQueue(".\myAdministrationQueue")
         
         ' Send messages to a queue.
         myNewQueue.SendMessage()
         
         ' Receive messages from a queue.
         Dim messageId As String = myNewQueue.ReceiveMessage()
         
         ' Receive acknowledgment message.
         If Not (messageId Is Nothing) Then
            myNewQueue.ReceiveAcknowledgment(messageId, ".\myAdministrationQueue")
         End If
         
         Return
      End Sub 'Main
      
      
      '**************************************************
      ' Creates a new queue.
      '**************************************************
      Public Shared Sub CreateQueue(queuePath As String)
         Try
            If Not MessageQueue.Exists(queuePath) Then
               MessageQueue.Create(queuePath)
            Else
               Console.WriteLine((queuePath + " already exists."))
            End If
         Catch e As MessageQueueException
            Console.WriteLine(e.Message)
         End Try
      End Sub 'CreateQueue
       
      
      
      '**************************************************
      ' Sends a string message to a queue.
      '**************************************************
      Public Sub SendMessage()
         
         ' Connect to a queue on the local computer.
         Dim myQueue As New MessageQueue(".\myQueue")
         
         ' Create a new message.
         Dim myMessage As New Message("Original Message")
         
         myMessage.AdministrationQueue = New MessageQueue(".\myAdministrationQueue")
         myMessage.AcknowledgeType = AcknowledgeTypes.PositiveReceive Or AcknowledgeTypes.PositiveArrival
         
         ' Send the Order to the queue.
         myQueue.Send(myMessage)
         
         Return
      End Sub 'SendMessage
      
      
      
      '**************************************************
      ' Receives a message containing an Order.
      '**************************************************
      Public Function ReceiveMessage() As String
         ' Connect to the a queue on the local computer.
         Dim myQueue As New MessageQueue(".\myQueue")
         
         myQueue.MessageReadPropertyFilter.CorrelationId = True
         
         
         ' Set the formatter to indicate body contains an Order.
         myQueue.Formatter = New XmlMessageFormatter(New Type() {GetType(String)})
         
         Dim returnString As String = Nothing
         
         Try
            ' Receive and format the message. 
            Dim myMessage As Message = myQueue.Receive()
            
            
            ' Display message information.
            Console.WriteLine("____________________________________________")
            Console.WriteLine("Original message information--")
            Console.WriteLine(("Body: " + myMessage.Body.ToString()))
            Console.WriteLine(("Id: " + myMessage.Id.ToString()))
            Console.WriteLine("____________________________________________")
            
            returnString = myMessage.Id
         
         
         Catch
         ' Handle Message Queuing exceptions.
         
         ' Handle invalid serialization format.
         Catch e As InvalidOperationException
            Console.WriteLine(e.Message)
         End Try
         
         ' Catch other exceptions as necessary.
         Return returnString
      End Function 'ReceiveMessage
      
      
      '**************************************************
      ' Receives a message containing an Order.
      '**************************************************
      Public Sub ReceiveAcknowledgment(messageId As String, queuePath As String)
         Dim found As Boolean = False
         Dim queue As New MessageQueue(queuePath)
         queue.MessageReadPropertyFilter.CorrelationId = True
         queue.MessageReadPropertyFilter.Acknowledgment = True
         
         Try
            While Not (queue.PeekByCorrelationId(messageId) Is Nothing)
               Dim myAcknowledgmentMessage As Message = queue.ReceiveByCorrelationId(messageId)
               
               ' Output acknowledgment message information. The correlation Id is identical
               ' to the id of the original message.
               Console.WriteLine("Acknowledgment Message Information--")
               Console.WriteLine(("Correlation Id: " + myAcknowledgmentMessage.CorrelationId.ToString()))
               Console.WriteLine(("Id: " + myAcknowledgmentMessage.Id.ToString()))
               Console.WriteLine(("Acknowledgment Type: " + myAcknowledgmentMessage.Acknowledgment.ToString()))
               Console.WriteLine("____________________________________________")
               
               found = True
            End While
         Catch e As InvalidOperationException
            ' This exception would be thrown if there is no (further) acknowledgment message
            ' with the specified correlation Id. Only output a message if there are no messages;
            ' not if the loop has found at least one.
            If found = False Then
               Console.WriteLine(e.Message)
            End If
         End Try 
      End Sub 'ReceiveAcknowledgment ' Handle other causes of invalid operation exception.
   End Class 'MyNewQueue
End Namespace 'MyProject 

[C#] 
using System;
using System.Messaging;

namespace MyProject
{

    /// <summary>
    /// Provides a container class for the example.
    /// </summary>
    public class MyNewQueue
    {

        //**************************************************
        // Provides an entry point into the application.
        //         
        // This example sends and receives a message from
        // a queue.
        //**************************************************

        public static void Main()
        {
            // Create a new instance of the class.
            MyNewQueue myNewQueue = new MyNewQueue();

            // Create new queues.
            CreateQueue(".\\myQueue");
            CreateQueue(".\\myAdministrationQueue");

            // Send messages to a queue.
            myNewQueue.SendMessage();

            // Receive messages from a queue.
            string messageId = myNewQueue.ReceiveMessage(); 

            // Receive acknowledgment message.
            if(messageId != null)
            {
                myNewQueue.ReceiveAcknowledgment(messageId, ".\\myAdministrationQueue");
            }

            return;
        }

        //**************************************************
        // Creates a new queue.
        //**************************************************

        public static void CreateQueue(string queuePath)
        {
            try    
            {
                if(!MessageQueue.Exists(queuePath))
                {
                    MessageQueue.Create(queuePath);
                }
                else
                {
                    Console.WriteLine(queuePath + " already exists.");
                }
            }
            catch (MessageQueueException e)
            {
                Console.WriteLine(e.Message);
            }
            
        }


        //**************************************************
        // Sends a string message to a queue.
        //**************************************************
        
        public void SendMessage()
        {

            // Connect to a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            // Create a new message.
            Message myMessage = new Message("Original Message"); 

            myMessage.AdministrationQueue = new MessageQueue(".\\myAdministrationQueue");
            myMessage.AcknowledgeType = AcknowledgeTypes.PositiveReceive | AcknowledgeTypes.PositiveArrival;

            // Send the Order to the queue.
            myQueue.Send(myMessage);

            return;
        }


        //**************************************************
        // Receives a message containing an Order.
        //**************************************************
        
        public  string ReceiveMessage()
        {
            // Connect to the a queue on the local computer.
            MessageQueue myQueue = new MessageQueue(".\\myQueue");

            myQueue.MessageReadPropertyFilter.CorrelationId = true;


            // Set the formatter to indicate body contains an Order.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(string)});

            string returnString = null;
            
            try
            {
                // Receive and format the message. 
                Message myMessage =    myQueue.Receive(); 


                // Display message information.
                Console.WriteLine("____________________________________________");
                Console.WriteLine("Original message information--");
                Console.WriteLine("Body: " +myMessage.Body.ToString());
                Console.WriteLine("Id: " + myMessage.Id.ToString());
                Console.WriteLine("____________________________________________");

                returnString =  myMessage.Id;
                
            }
            
            catch (MessageQueueException)
            {
                // Handle Message Queuing exceptions.
            }

            // Handle invalid serialization format.
            catch (InvalidOperationException e)
            {
                Console.WriteLine(e.Message);
            }
            
            // Catch other exceptions as necessary.

            return returnString;
        }

        //**************************************************
        // Receives a message containing an Order.
        //**************************************************
        
        public void ReceiveAcknowledgment(string messageId, string queuePath)
        {
            bool found = false;
            MessageQueue queue = new MessageQueue(queuePath);
            queue.MessageReadPropertyFilter.CorrelationId = true;
            queue.MessageReadPropertyFilter.Acknowledgment = true;

            try
            {
                while(queue.PeekByCorrelationId(messageId) != null)
                {
                    Message myAcknowledgmentMessage = queue.ReceiveByCorrelationId(messageId);
            
                    // Output acknowledgment message information. The correlation Id is identical
                    // to the id of the original message.
                    Console.WriteLine("Acknowledgment Message Information--");
                    Console.WriteLine("Correlation Id: " + myAcknowledgmentMessage.CorrelationId.ToString());
                    Console.WriteLine("Id: " + myAcknowledgmentMessage.Id.ToString());
                    Console.WriteLine("Acknowledgment Type: " + myAcknowledgmentMessage.Acknowledgment.ToString());
                    Console.WriteLine("____________________________________________");

                    found = true;
                }
            }
            catch (InvalidOperationException e)
            { 
                // This exception would be thrown if there is no (further) acknowledgment message
                // with the specified correlation Id. Only output a message if there are no messages;
                // not if the loop has found at least one.
                if(found == false)
                {    
                    Console.WriteLine(e.Message);
                }

                // Handle other causes of invalid operation exception.
            }

        }
    }
}

[C++] 
#using <mscorlib.dll>
#using <system.dll>
#using <system.messaging.dll>

using namespace System;
using namespace System::Messaging;

__gc class MyNewQueue 
{
public:
    static void CreateQueue(String* queuePath) 
    {
        try 
        {
            if (!MessageQueue::Exists(queuePath)) 
            {
                MessageQueue::Create(queuePath);
            }
            else 
            {
                Console::WriteLine("{0} already exists.", queuePath );
            }
        } 
        catch (MessageQueueException* e) 
        {
            Console::WriteLine(e->Message);
        }

    }

public:
    void SendMessage() 
    {

        // Connect to a queue on the local computer.
        MessageQueue* myQueue = new MessageQueue(S".\\myQueue");

        // Create a new message.
        Message* myMessage = new Message(S"Original Message");
        myMessage->AdministrationQueue = new MessageQueue(S".\\myAdministrationQueue");
        myMessage->AcknowledgeType = (AcknowledgeTypes)(AcknowledgeTypes::PositiveReceive | AcknowledgeTypes::PositiveArrival);

        // Send the Order to the queue.
        myQueue->Send(myMessage);

        return;
    }



public:
    String* ReceiveMessage() 
    {
        // Connect to the a queue on the local computer.
        MessageQueue* myQueue = new MessageQueue(S".\\myQueue");

        myQueue->MessageReadPropertyFilter->CorrelationId = true;

        Type* p __gc[] = new Type*[1];
        p[0] =    __typeof(String);
        myQueue->Formatter = new XmlMessageFormatter( p );

        String* returnString = 0;

        try 
        {
            // Receive and format the message. 
            Message* myMessage = myQueue->Receive(); 

            // Display message information.
            Console::WriteLine(S"____________________________________________");
            Console::WriteLine(S"Original message information--");
            Console::WriteLine(S"Body: {0}", myMessage->Body);
            Console::WriteLine(S"Id: {0}", myMessage->Id);
            Console::WriteLine(S"____________________________________________");

            returnString =  myMessage->Id;

        }
        catch (MessageQueueException*) 
        {
            // Handle Message Queuing exceptions.
        }

        // Handle invalid serialization format.
        catch (InvalidOperationException* e) 
        {
            Console::WriteLine(e->Message);
        }

        // Catch other exceptions as necessary.

        return returnString;
    }

public:
    void ReceiveAcknowledgment(String* messageId, String* queuePath) 
    {
        bool found = false;
        MessageQueue* queue = new MessageQueue(queuePath);
        queue->MessageReadPropertyFilter->CorrelationId = true;
        queue->MessageReadPropertyFilter->Acknowledgment = true;

        try 
        {
            while(queue->PeekByCorrelationId(messageId) != 0) 
            {
                Message* myAcknowledgmentMessage = queue->ReceiveByCorrelationId(messageId);

                // Output acknowledgment message information. The correlation Id is identical
                // to the id of the original message.
                Console::WriteLine(S"Acknowledgment Message Information--");
                Console::WriteLine(S"Correlation Id: {0}", myAcknowledgmentMessage->CorrelationId);
                Console::WriteLine(S"Id: {0}", myAcknowledgmentMessage->Id);
                Console::WriteLine(S"Acknowledgment Type: {0}", __box(myAcknowledgmentMessage->Acknowledgment));
                Console::WriteLine(S"____________________________________________");

                found = true;
            }
        } 
        catch (InvalidOperationException* e) 
        { 
            // This exception would be thrown if there is no (further) acknowledgment message
            // with the specified correlation Id. Only output a message if there are no messages;
            // not if the loop has found at least one.
            if (found == false)
            {    
                Console::WriteLine(e->Message);
            }

            // Handle other causes of invalid operation exception.
        }

    }
};

int main() 
{
    // Create a new instance of the class.
    MyNewQueue* myNewQueue = new MyNewQueue();

    // Create new queues.
    MyNewQueue::CreateQueue(S".\\myQueue");
    MyNewQueue::CreateQueue(S".\\myAdministrationQueue");

    // Send messages to a queue.
    myNewQueue->SendMessage();

    // Receive messages from a queue.
    String* messageId = myNewQueue->ReceiveMessage(); 

    // Receive acknowledgment message.
    if (messageId != 0) 
    {
        myNewQueue->ReceiveAcknowledgment(messageId, S".\\myAdministrationQueue");
    }

    return 0;
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

Message クラス | Message メンバ | System.Messaging 名前空間 | CorrelationId