次の方法で共有


Message クラス

メッセージ キューのメッセージを定義するのに必要なプロパティへのアクセスを実現します。

この型のすべてのメンバの一覧については、Message メンバ を参照してください。

System.Object
   System.MarshalByRefObject
      System.ComponentModel.Component
         System.Messaging.Message

Public Class Message
   Inherits Component
[C#]
public class Message : Component
[C++]
public __gc class Message : public Component
[JScript]
public class Message extends Component

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

Message クラスは、キューからのメッセージをピークまたは受信したり、キューにメッセージを送信するときにメッセージ プロパティを細かく制御したりするために使用します。

MessageQueue は、キューからのメッセージをピークまたは受信するときに Message クラスを使用します。これは、 MessageQueue.Peek メソッドと MessageQueue.Receive メソッドがどちらも Message クラスの新しいインスタンスを作成し、インスタンスのプロパティを設定するためです。 Message クラスの読み取り専用プロパティは、キューからのメッセージの取得に適用され、読み取り/書き込みプロパティはメッセージの送信と取得に適用されます。

MessageQueue クラスの Send メソッドでは、そのキューに送信するメッセージとして任意のオブジェクト型を指定できます。 MessageQueue インスタンスの DefaultPropertiesToSend プロパティを使うと、キューに送信される汎用メッセージの設定を指定できます。設定できるのは、書式指定子、ラベル、暗号化、認証などです。また、受信確認メッセージとレポート メッセージに応答するようにメッセージ処理アプリケーションを調整するときに、適切な DefaultPropertiesToSend メンバの値を指定することもできます。 Message インスタンスを使ってキューにメッセージを送信する方法では、これらのプロパティの多くにアクセスして変更できます。1 つのメッセージだけ、またはメッセージごとのどちらかでプロパティを変更できます。 Message プロパティは DefaultPropertiesToSend プロパティに優先します。

メッセージ データは主として Body プロパティに格納されますが、一部のデータは AppSpecific プロパティと Extension プロパティに格納されます。このうち、メッセージ データが暗号化、シリアル化、または逆シリアル化されるときに影響を受けるのは、 Body プロパティの内容だけです。

Body プロパティの内容は、メッセージが送信されるときに、指定した Formatter プロパティを使ってシリアル化されます。シリアル化された内容は、 BodyStream プロパティに格納されます。また、たとえばメッセージのデータ内容としてファイルを送信するために、 BodyStream プロパティを直接設定することもできます。 Body プロパティまたは Formatter プロパティは、メッセージを送信する前にいつでも変更でき、 Send の呼び出し時にデータはその指定どおりにシリアル化されます。

MessageQueue.DefaultPropertiesToSend プロパティによって定義されるプロパティは、 Message 以外のタイプのメッセージだけに適用されます。 MessageQueueDefaultPropertiesToSend プロパティを指定していても、キューに Message インスタンスが送信されると、そのインスタンスの同名のプロパティが使用され、プロパティの既定値は無視されます。

Message のインスタンスの初期プロパティ値の一覧については、 Message コンストラクタのトピックを参照してください。

使用例

[Visual Basic, C#, C++] BinaryMessageFormatter を使用してメッセージの本文を書式設定する例を次に示します。.

 
Imports System
Imports System.Messaging
Imports System.Drawing
Imports System.IO


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 a queue on the local computer.
         CreateQueue(".\myQueue")
         
         ' Send a message to a queue.
         myNewQueue.SendMessage()
         
         ' Receive a message from a queue.
         myNewQueue.ReceiveMessage()
         
         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 an image to a queue, using the BinaryMessageFormatter.
      '**************************************************
      Public Sub SendMessage()
         Try
            
            ' Create a new bitmap.
            ' The file must be in the \bin\debug or \bin\retail folder, or
            ' you must give a full path to its location.
            Dim myImage As Image = Bitmap.FromFile("SentImage.bmp")
            
            ' Connect to a queue on the local computer.
            Dim myQueue As New MessageQueue(".\myQueue")
            
            Dim myMessage As New Message(myImage, New BinaryMessageFormatter())
            
            ' Send the image to the queue.
            myQueue.Send(myMessage)
         Catch e As ArgumentException
            Console.WriteLine(e.Message)
         End Try 
         
         Return
      End Sub 'SendMessage
      
      
      
      '**************************************************
      ' Receives a message containing an image.
      '**************************************************
      Public Sub ReceiveMessage()
         
         Try
            
            ' Connect to the a queue on the local computer.
            Dim myQueue As New MessageQueue(".\myQueue")
            
            ' Set the formatter to indicate body contains an Order.
            myQueue.Formatter = New BinaryMessageFormatter()
            
            ' Receive and format the message. 
            Dim myMessage As System.Messaging.Message = myQueue.Receive()
            Dim myImage As Bitmap = CType(myMessage.Body, Bitmap)
            
            ' This will be saved in the \bin\debug or \bin\retail folder.
            myImage.Save("ReceivedImage.bmp", System.Drawing.Imaging.ImageFormat.Bmp)
         
         
         
         Catch
         ' Handle Message Queuing exceptions.
         
         ' Handle invalid serialization format.
         Catch e As InvalidOperationException
            Console.WriteLine(e.Message)
         
         Catch e As IOException
         End Try
         ' Handle file access exceptions.
         
         ' Catch other exceptions as necessary.
         Return
      End Sub 'ReceiveMessage
   End Class 'MyNewQueue
End Namespace 'MyProject

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

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 a queue on the local computer.
            CreateQueue(".\\myQueue");
            
            // Send a message to a queue.
            myNewQueue.SendMessage();

            // Receive a message from a queue.
            myNewQueue.ReceiveMessage();

            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 an image to a queue, using the BinaryMessageFormatter.
        //**************************************************
        
        public void SendMessage()
        {
            try{

                // Create a new bitmap.
                // The file must be in the \bin\debug or \bin\retail folder, or
                // you must give a full path to its location.
                Image myImage = Bitmap.FromFile("SentImage.bmp");

                // Connect to a queue on the local computer.
                MessageQueue myQueue = new MessageQueue(".\\myQueue");
                
                Message myMessage = new Message(myImage, new BinaryMessageFormatter());

                // Send the image to the queue.
                myQueue.Send(myMessage);
            }
            catch(ArgumentException e)
            {
                Console.WriteLine(e.Message);
            
            }

            return;
        }


        //**************************************************
        // Receives a message containing an image.
        //**************************************************
        
        public  void ReceiveMessage()
        {
                        
            try
            {

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

                // Set the formatter to indicate body contains an Order.
                myQueue.Formatter = new BinaryMessageFormatter();

                // Receive and format the message. 
                System.Messaging.Message myMessage = myQueue.Receive(); 
                Bitmap myImage = (Bitmap)myMessage.Body;
                
                // This will be saved in the \bin\debug or \bin\retail folder.
                myImage.Save("ReceivedImage.bmp",System.Drawing.Imaging.ImageFormat.Bmp);
                
                
            }
            
            catch (MessageQueueException)
            {
                // Handle Message Queuing exceptions.
            }

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

            catch (IOException e)
            {
                // Handle file access exceptions.
            }
            
            // Catch other exceptions as necessary.

            return;
        }
    }
}

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

using namespace System;
using namespace System::Messaging;
using namespace System::Drawing;
using namespace System::IO;

/// <summary>
/// Provides a container class for the example.
/// </summary>
__gc class MyNewQueue 
{
    //*************************************************
    // Creates a new queue.
    //*************************************************
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);
        }

    }

    //*************************************************
    // Sends an image to a queue, using the BinaryMessageFormatter.
    //*************************************************
public:
    void SendMessage() 
    {
        try 
        {
            // Create a new bitmap.
            // The file must be in the \bin\debug or \bin\retail folder, or
            // you must give a full path to its location.
            Image* myImage = Bitmap::FromFile(S"SentImage::bmp");

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

            Message* myMessage = new Message(myImage, new BinaryMessageFormatter());

            // Send the image to the queue.
            myQueue->Send(myMessage);
        } 
        catch (ArgumentException* e) 
        {
            Console::WriteLine(e->Message);
        }

        return;
    }

    //*************************************************
    // Receives a message containing an image.
    //*************************************************
public:
    void ReceiveMessage() 
    {
        try 
        {
            // Connect to the a queue on the local computer.
            MessageQueue* myQueue = new MessageQueue(S".\\myQueue");

            // Set the formatter to indicate body contains an Order.
            myQueue->Formatter = new BinaryMessageFormatter();

            // Receive and format the message. 
            Message* myMessage = myQueue->Receive(); 
            Bitmap* myImage = static_cast<Bitmap*>(myMessage->Body);

            // This will be saved in the \bin\debug or \bin\retail folder.
            myImage->Save(S"ReceivedImage::bmp", System::Drawing::Imaging::ImageFormat::Bmp);
        } 
        catch (MessageQueueException*) 
        {
            // Handle Message Queuing exceptions.
        }

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

        // Catch other exceptions as necessary.
        return;
    }
};

//*************************************************
// Provides an entry point into the application.
//         
// This example sends and receives a message from
// a queue.
//*************************************************
int main() 
{
    // Create a new instance of the class.
    MyNewQueue* myNewQueue = new MyNewQueue();

    // Create a queue on the local computer.
    MyNewQueue::CreateQueue(S".\\myQueue");

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

    // Receive a message from a queue.
    myNewQueue->ReceiveMessage();

    return 0;
}

[Visual Basic, C#, C++] XmlMessageFormatter を使用してメッセージの本文を書式設定する例を次に示します。.

 
Imports System
Imports System.Messaging
Imports System.Drawing
Imports System.IO


Namespace MyProject
    _
   
   ' The following example 
   ' sends to a queue and receives from a queue.
   Public Class Order
      Public orderId As Integer
      Public orderTime As DateTime
   End Class 'Order
    _
   
   '/ <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 a queue on the local computer.
         CreateQueue(".\myQueue")
         
         ' Send a message to a queue.
         myNewQueue.SendMessage()
         
         ' Receive a message from a queue.
         myNewQueue.ReceiveMessage()
         
         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 an Order to a queue.
      '**************************************************
      Public Sub SendMessage()
         Try
            
            ' Create a new order and set values.
            Dim sentOrder As New Order()
            sentOrder.orderId = 3
            sentOrder.orderTime = DateTime.Now
            
            ' Connect to a queue on the local computer.
            Dim myQueue As New MessageQueue(".\myQueue")
            
            
            
            ' Create the new order.
            Dim myMessage As New Message(sentOrder)
            
            ' Send the order to the queue.
            myQueue.Send(myMessage)
         Catch e As ArgumentException
            Console.WriteLine(e.Message)
         End Try 
         
         Return
      End Sub 'SendMessage
      
      
      
      '**************************************************
      ' Receives a message containing an order.
      '**************************************************
      Public Sub ReceiveMessage()
         ' Connect to the a queue on the local computer.
         Dim myQueue As New MessageQueue(".\myQueue")
         
         ' Set the formatter to indicate body contains an Order.
         myQueue.Formatter = New XmlMessageFormatter(New Type() {GetType(MyProject.Order)})
         
         Try
            ' Receive and format the message. 
            Dim myMessage As Message = myQueue.Receive()
            Dim myOrder As Order = CType(myMessage.Body, Order)
            
            ' Display message information.
            Console.WriteLine(("Order ID: " + myOrder.orderId.ToString()))
            Console.WriteLine(("Sent: " + myOrder.orderTime.ToString()))
         
         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
      End Sub 'ReceiveMessage
   End Class 'MyNewQueue
End Namespace 'MyProject

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

namespace MyProject
{

    // The following example 
    // sends to a queue and receives from a queue.
    public class Order
    {
        public int orderId;
        public DateTime orderTime;
    };    

    /// <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 a queue on the local computer.
            CreateQueue(".\\myQueue");
            
            // Send a message to a queue.
            myNewQueue.SendMessage();

            // Receive a message from a queue.
            myNewQueue.ReceiveMessage();

            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 an Order to a queue.
        //**************************************************
        
        public void SendMessage()
        {
            try
            {

                // Create a new order and set values.
                Order sentOrder = new Order();
                sentOrder.orderId = 3;
                sentOrder.orderTime = DateTime.Now;

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


                
                // Create the new order.
                Message myMessage = new Message(sentOrder);

                // Send the order to the queue.
                myQueue.Send(myMessage);
            }
            catch(ArgumentException e)
            {
                Console.WriteLine(e.Message);
            
            }

            return;
        }


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

            // Set the formatter to indicate body contains an Order.
            myQueue.Formatter = new XmlMessageFormatter(new Type[]
                {typeof(MyProject.Order)});
            
            try
            {
                // Receive and format the message. 
                Message myMessage =    myQueue.Receive(); 
                Order myOrder = (Order)myMessage.Body;

                // Display message information.
                Console.WriteLine("Order ID: " + 
                    myOrder.orderId.ToString());
                Console.WriteLine("Sent: " + 
                    myOrder.orderTime.ToString());
            }
            
            catch (MessageQueueException)
            {
                // Handle Message Queuing exceptions.
            }

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

            return;
        }
    }
}

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

using namespace System;
using namespace System::Messaging;
using namespace System::Drawing;
using namespace System::IO;


__gc class Order 
{
public:
    int orderId;
public:
    DateTime orderTime;
};    

__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() 
    {
        try 
        {
            // Create a new order and set values.
            Order* sentOrder = new Order();
            sentOrder->orderId = 3;
            sentOrder->orderTime = DateTime::Now;

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

            // Create the new order.
            Message* myMessage = new Message(sentOrder);

            // Send the order to the queue.
            myQueue->Send(myMessage);
        } 
        catch (ArgumentException* e) 
        {
            Console::WriteLine(e->Message);

        }
        return;
    }

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

        // Set the formatter to indicate body contains an Order.
        Type* p __gc[] = new Type*[1];
        p[0] = __typeof(Order);
        myQueue->Formatter = new XmlMessageFormatter( p );

        try 
        {
            // Receive and format the message. 
            Message* myMessage = myQueue->Receive(); 
            Order* myOrder = dynamic_cast<Order*>(myMessage->Body);

            // Display message information.
            Console::WriteLine(S"Order ID: {0}", __box(myOrder->orderId));
            Console::WriteLine(S"Sent: {0}", __box(myOrder->orderTime));
        }
        catch (MessageQueueException*) 
        {
            // Handle Message Queuing exceptions.
        }
        // Handle invalid serialization format.
        catch (InvalidOperationException* e) 
        {
            Console::WriteLine(e->Message);
        }
        // Catch other exceptions as necessary.

        return;
    }
};

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

    // Create a queue on the local computer.
    MyNewQueue::CreateQueue(S".\\myQueue");

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

    // Receive a message from a queue.
    myNewQueue->ReceiveMessage();

    return 0;
}

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

必要条件

名前空間: System.Messaging

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

アセンブリ: System.Messaging (System.Messaging.dll 内)

参照

Message メンバ | System.Messaging 名前空間 | MessageQueue | DefaultPropertiesToSend | Send | Receive | Peek