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 を使用してキューから読み取るときは、フォーマッタがメッセージ データを Message の Body プロパティに逆シリアル化します。
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