次の方法で共有


BinaryMessageFormatter クラス

バイナリ形式を使用して、オブジェクト、または関連付けられたオブジェクトのグラフ全体を、メッセージ キューのメッセージの本文にシリアル化、またはメッセージ キューのメッセージの本文から逆シリアル化します。

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

System.Object
   System.Messaging.BinaryMessageFormatter

Public Class BinaryMessageFormatter
   Implements IMessageFormatter, ICloneable
[C#]
public class BinaryMessageFormatter : IMessageFormatter, ICloneable
[C++]
public __gc class BinaryMessageFormatter : public
   IMessageFormatter, ICloneable
[JScript]
public class BinaryMessageFormatter implements IMessageFormatter,
   ICloneable

スレッドセーフ

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

解説

BinaryMessageFormatter は、効率的で、ほとんどのオブジェクトのシリアル化に使用できます。シリアル化の結果、コンパクトになり、高速に解析できるようになりますが、 XmlMessageFormatter とは異なり、疎結合されたメッセージ処理はできません。

メモ   疎結合されているとは、クライアントとサーバーは送信および受信された型のバージョン管理を独立して行うことができるということです。

アプリケーションが MessageQueue クラスのインスタンスを使用してメッセージをキューに送信するときに、フォーマッタはオブジェクトをストリームにシリアル化し、メッセージ本文に挿入します。 MessageQueue を使用してキューから読み取るときは、フォーマッタがメッセージ データを MessageBody プロパティに逆シリアル化します。

BinaryMessageFormatter のスループットは、 XmlMessageFormatter のスループットよりも高速です。疎結合されたメッセージ処理よりも速度を優先する場合は 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;
}

[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 内)

参照

BinaryMessageFormatter メンバ | System.Messaging 名前空間 | XmlMessageFormatter | ActiveXMessageFormatter | Message.Formatter | MessageQueue.Formatter