XmlMessageFormatterとは? わかりやすく解説

XmlMessageFormatter クラス

XSD スキーマ定義の XML 書式を使用して、メッセージ本文との間でオブジェクトをシリアル化および逆シリアル化します。

名前空間: System.Messaging
アセンブリ: System.Messaging (system.messaging.dll 内)
構文構文

Public Class XmlMessageFormatter
    Implements IMessageFormatter, ICloneable
Dim instance As XmlMessageFormatter
public class XmlMessageFormatter : IMessageFormatter,
 ICloneable
public ref class XmlMessageFormatter : IMessageFormatter,
 ICloneable
public class XmlMessageFormatter implements
 IMessageFormatter, ICloneable
public class XmlMessageFormatter implements
 IMessageFormatter, ICloneable
解説解説

XmlMessageFormatter は、キューに書き込まれたメッセージをシリアル化するために MessageQueue のインスタンスが使用する既定のフォーマッタです。MessageQueue のインスタンスを作成するときに、XmlMessageFormatter のインスタンスが作成され、MessageQueue に関連付けられます。別のフォーマッタを指定するには、コード内でそのフォーマッタを作成して MessageQueue の Formatter プロパティに割り当てます。

キューの既定の XmlMessageFormatter インスタンスを使用して、キューに書き込むことができますが、これを使用してキューから読み取るには、フォーマッタで TargetTypes プロパティまたは TargetTypeNames プロパティを設定する必要があります。既定のフォーマッタのインスタンスで、これらの値の一方または両方を設定できます。または、フォーマッタの新しいインスタンスを作成し、値を適切な XmlMessageFormatter コンストラクタに引数として渡すことによって、自動的に設定できます。

TargetTypeNames ではなく TargetTypes を指定する場合は、読み取り時ではなくコンパイル時に型の存在を確認することで、エラーの可能性が抑制されます。TargetTypeNames では、すべてのエントリが完全に限定され、アセンブリ名が指定されている必要があります。さらに、複数のバージョンを同時に操作する場合は、対象の型名にバージョン番号も追加する必要があります。

TargetTypeNames プロパティおよび TargetTypes プロパティを使うと、メッセージの逆シリアル化時に、フォーマッタがどのスキーマを一致させるかを指示できます。これにより、フォーマッタがメッセージ本文を解釈できます。

メッセージ本文でシリアル化されるインスタンスは、型配列で表されたスキーマの 1 つに従っている必要があります。Receive メソッドを使用してメッセージを読み取る場合は、識別されたスキーマに対応する型のオブジェクトがこのメソッドによって作成され、そこにメッセージ本文が読み込まれます。

キューから読み取るときに設定する必要があるのは、2 つのプロパティのうちの 1 つだけですが、両方を設定することもできます。型のセットとは、2 つのプロパティの型を結合したものです。どのプロパティを使用するかは、アプリケーションによって異なります。メッセージ本文に、両方のプロパティの配列内のどの型ともスキーマが一致しない型が含まれている場合は、メッセージの読み取り時に例外がスローされます。

XmlMessageFormatter は、疎結合された重要な XML ベースのメッセージ処理コンポーネントです。XSD.exe ユーティリティは、ユーティリティを使用してアプリケーションで使用するクラスをシリアル化するときなどに、XML 書式を使用して XML スキーマを生成します。このクラスには既定のコンストラクタが必要です。

この書式は、クラス データを記述するために配布するスキーマに基づいてユーティリティがクラスを生成するときに、逆のプロセスで再び使用されます。ユーティリティとユーティリティが生成する XML スキーマを使用すると、クラスの実装が変更された後、クラスを再コンパイルするたびに .dll ファイルを再配布する必要がなくなります。クライアントまたはサーバーでスキーマが変更された場合を除き、どちらか一方でその他の変更が行われても、もう一方に影響を与えることはありません。

使用例使用例

サーバー コンポーネント、order クラス、およびクライアント コードの 3 つのコードが含まれているコード例を次に示します。XSD.exe ユーティリティで order クラスを使用すると、受信メッセージ内でサーバーが認識するスキーマを生成できます。スキーマは、XML 形式のファイルで、クラスの "形" を記述します。次にクライアント側でこのスキーマを使用して、サーバー クラスと同じスキーマを共有するクライアント固有の order クラスを生成できます。

メッセージ キューを通じてオーダーを受信するサーバー コンポーネントを表すコード例を次に示します。メッセージの本文は、スキーマが下の Order.cs クラスと一致するオーダー オブジェクトです。サーバー プロセスまたはサーバー アプリケーションが、オーダーを逆シリアル化します。

Imports System
Imports System.Messaging



Public Class Server
    
    
    Public Shared Sub Main()
        
        Console.WriteLine("Processing Orders")
        
        Dim queuePath As String
 = ".\orders"
        EnsureQueueExists(queuePath)
        Dim queue As New
 MessageQueue(queuePath)
        CType(queue.Formatter, XmlMessageFormatter).TargetTypeNames = New
 String() {"Order"}
        
        While True
            Dim newOrder As Order = CType(queue.Receive().Body,
 Order)
            newOrder.ShipItems()
        End While
    End Sub 'Main
    
    
    ' Creates the queue if it does not already exist.
    Public Shared Sub EnsureQueueExists(path
 As String)
        If Not MessageQueue.Exists(path) Then
            MessageQueue.Create(path)
        End If
    End Sub 'EnsureQueueExists
End Class 'Server
using System;
using System.Messaging;
 
 public class Server{
 
     public static void
 Main(){
 
         Console.WriteLine("Processing Orders");
 
         string queuePath = ".\\orders";
         EnsureQueueExists(queuePath);
         MessageQueue queue = new MessageQueue(queuePath);
         ((XmlMessageFormatter)queue.Formatter).TargetTypeNames = new
 string[]{"Order"};
 
         while(true){
             Order newOrder = (Order)queue.Receive().Body;
             newOrder.ShipItems();
         }
     }
 
     // Creates the queue if it does not already exist.
     public static void
 EnsureQueueExists(string path){
         if(!MessageQueue.Exists(path)){
             MessageQueue.Create(path);
         }
     }
 }
#using <System.dll>
#using <System.Messaging.dll>

using namespace System;
using namespace System::Messaging;

// placeholder; see complete definition elsewhere in this section
public ref class Order
{
public:
   void ShipItems(){}

};


// Creates the queue if it does not already exist.
void EnsureQueueExists( String^ path )
{
   if (  !MessageQueue::Exists( path ) )
   {
      MessageQueue::Create( path );
   }
}

int main()
{
   Console::WriteLine( "Processing Orders" );
   String^ queuePath = ".\\orders";
   EnsureQueueExists( queuePath );
   MessageQueue^ queue = gcnew MessageQueue( queuePath );
   array<String^>^temp0 = {"Order"};
   (dynamic_cast<XmlMessageFormatter^>(queue->Formatter))->TargetTypeNames
 = temp0;
   while ( true )
   {
      Order^ newOrder = dynamic_cast<Order^>(queue->Receive()->Body);
      newOrder->ShipItems();
   }
}

import System.*;
import System.Messaging.*;

public class Server
{
    public static void main(String[]
 args)
    {
        Console.WriteLine("Processing Orders");

        String queuePath = ".\\orders";
        EnsureQueueExists(queuePath);
        MessageQueue queue = new MessageQueue(queuePath);
        ((XmlMessageFormatter)queue.get_Formatter()).
            set_TargetTypeNames(new String[] { "Order"
 });

        while (true) {
            Order newOrder = (Order)queue.Receive().get_Body();
            newOrder.ShipItems();
        }
    } //main

    // Creates the queue if it does not already exist.
    public static void EnsureQueueExists(String
 path)
    {
        if (!(MessageQueue.Exists(path))) {
            MessageQueue.Create(path);
        }
    } //EnsureQueueExists
} //Server

サーバーのアプリケーションが受信して逆シリアル化するオーダー オブジェクトに対するスキーマを提供する order クラスを表すコード例を次に示します。

Imports System
Imports Microsoft.VisualBasic

Public Class Order
    
    Public itemId As Integer
    Public quantity As Integer
    Public address As String
    
    
    Public Sub ShipItems()
        
        Console.WriteLine("Order Placed:")
        Console.WriteLine(ControlChars.Tab & "Item ID  : {0}",
 itemId)
        Console.WriteLine(ControlChars.Tab & "Quantity : {0}",
 quantity)
        Console.WriteLine(ControlChars.Tab & "Ship To  : {0}",
 address)

        ' Add order to the database.
        ' Insert code here.
 
    End Sub 'ShipItems 
End Class 'Order 
using System;
 
 public class Order{
 
     public int itemId;
     public int quantity;
     public string address;
 
     public void ShipItems(){
 
         Console.WriteLine("Order Placed:");
         Console.WriteLine("\tItem ID  : {0}",itemId);
         Console.WriteLine("\tQuantity : {0}",quantity);
         Console.WriteLine("\tShip To  : {0}",address);
 
         // Add order to the database.
         /* Insert code here. */
 
     }
 }
using namespace System;
public ref class Order
{
public:
   int itemId;
   int quantity;
   String^ address;
   void ShipItems()
   {
      Console::WriteLine( "Order Placed:" );
      Console::WriteLine( "\tItem ID  : {0}", itemId );
      Console::WriteLine( "\tQuantity : {0}", quantity );
      Console::WriteLine( "\tShip To  : {0}", address );
      
      // Add order to the database.
      /* Insert code here. */
   }

};

import System.*;

public class Order
{
    public int itemId;
    public int quantity;
    public String address;

    public void ShipItems()
    {
        Console.WriteLine("Order Placed:");
        Console.WriteLine("\tItem ID  : {0}", System.Convert.ToString(itemId));
        Console.WriteLine("\tQuantity : {0}", System.Convert.ToString(quantity));
        Console.WriteLine("\tShip To  : {0}", System.Convert.ToString(address));
        // Add order to the database.
        /* Insert code here. */
    } //ShipItems 
} //Order 

サーバーのアプリケーションとやり取りするすべてのクライアント アプリケーションは、ローカルに定義された order クラスの情報をメッセージ本文にシリアル化して、メッセージをサーバーに送信する必要があります。ローカルに定義された order クラスには、サーバーのアプリケーションがメッセージ本文を逆シリアル化するサーバー定義の order クラスと同じスキーマが必要です。XSD.exe ユーティリティを使用すると、サーバーのアプリケーション マネージャは、サーバーに送信するメッセージのシリアル化にクライアントが使用するスキーマを作成および配布できます。

クライアント アプリケーション マネージャが order クラスのスキーマを受信すると、XSD.exe ユーティリティを再び使用してスキーマからクライアント固有の order クラスを生成します。下のクライアント コード例では、サーバーの order クラスではなく、このクラスを使用します。XSD.exe ユーティリティは、スキーマ生成クラスに元のクラスと同じ名前を付けます。この新しい order クラスを使用して、オーダーをメッセージ本文にシリアル化します。

オーダーをシリアル化し、オーダーに関連付けられた情報をキューに送信するクライアント側の処理を行うコード例を次に示します。このコードは、XSD.exe ユーティリティで Order.cs クラス用に生成されたスキーマの要素に品目、数量、住所の情報を関連付けます。オーダーは、ローカル コンピュータの Orders キューに送信されます。

Imports System
Imports System.Messaging

Class Client
    
    
    Public Shared Sub Main()
        
        Dim queuePath As String
 = ".\orders"
        EnsureQueueExists(queuePath)
        Dim queue As New
 MessageQueue(queuePath)
        
        Dim orderRequest As New
 Order()
        orderRequest.itemId = 1025
        orderRequest.quantity = 5
        orderRequest.address = "One Microsoft Way"
        
        queue.Send(orderRequest)
        ' This line uses a new method you define on the Order class:
        ' orderRequest.PrintReceipt()

    End Sub 'Main
    
    ' Creates the queue if it does not already exist.
    Public Shared Sub EnsureQueueExists(path
 As String)
        If Not MessageQueue.Exists(path) Then
            MessageQueue.Create(path)
        End If
    End Sub 'EnsureQueueExists
End Class 'Client 
using System;
using System.Messaging;
 
 class Client{
 
     public static void
 Main(){
 
         string queuePath = ".\\orders";
         EnsureQueueExists(queuePath);
         MessageQueue queue = new MessageQueue(queuePath);
 
         Order orderRequest = new Order();
         orderRequest.itemId = 1025;
         orderRequest.quantity = 5;
         orderRequest.address = "One Microsoft Way";
 
         queue.Send(orderRequest);
         // This line uses a new method you define on the Order class:
         // orderRequest.PrintReceipt();
     }
 
     // Creates the queue if it does not already exist.
     public static void
 EnsureQueueExists(string path){
         if(!MessageQueue.Exists(path)){
             MessageQueue.Create(path);
         }
     }
 
 }
#using <System.dll>
#using <System.Messaging.dll>

using namespace System;
using namespace System::Messaging;

// placeholder; see complete definition elsewhere in this section
public ref class Order
{
public:
   int itemId;
   int quantity;
   String^ address;
   void ShipItems(){}

};


// Creates the queue if it does not already exist.
void EnsureQueueExists( String^ path )
{
   if (  !MessageQueue::Exists( path ) )
   {
      MessageQueue::Create( path );
   }
}

int main()
{
   String^ queuePath = ".\\orders";
   EnsureQueueExists( queuePath );
   MessageQueue^ queue = gcnew MessageQueue( queuePath );
   Order^ orderRequest = gcnew Order;
   orderRequest->itemId = 1025;
   orderRequest->quantity = 5;
   orderRequest->address = "One Microsoft Way";
   queue->Send( orderRequest );
   
   // This line uses a new method you define on the Order class:
   // orderRequest.PrintReceipt();
}

import System.*;
import System.Messaging.*;

class Client
{
    public static void main(String
 args[])
    {
        String queuePath = ".\\orders";
        EnsureQueueExists(queuePath);
        MessageQueue queue = new MessageQueue(queuePath);

        Order orderRequest = new Order();
        orderRequest.itemId = 1025;
        orderRequest.quantity = 5;
        orderRequest.address = "One Microsoft Way";

        queue.Send(orderRequest);
        // This line uses a new method you define on the Order class:
        // orderRequest.PrintReceipt();
    } //main

    // Creates the queue if it does not already exist.
    public static void EnsureQueueExists(String
 path)
    {
        if (!(MessageQueue.Exists(path))) {
            MessageQueue.Create(path);
        }
    } //EnsureQueueExists
} //Client

スキーマがサーバーの order クラスから生成された後でも、クラスを変更できます。スキーマを変更した場合を除いて、スキーマを再配布する必要はありません。スキーマを配布し、クライアント側の order クラスを生成した後は、スキーマそのものが変更されていない場合、そのクライアント クラスもサーバーの order クラスから独立して変更できます。2 つのクラスは、疎結合されています。

継承階層継承階層
System.Object
  System.Messaging.XmlMessageFormatter
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
XmlMessageFormatter メンバ
System.Messaging 名前空間
MessageQueue クラス
ActiveXMessageFormatter クラス
BinaryMessageFormatter クラス
IMessageFormatter インターフェイス

XmlMessageFormatter コンストラクタ ()

対象の型を設定せずに、XmlMessageFormatter クラスの新しいインスタンスを初期化します。

名前空間: System.Messaging
アセンブリ: System.Messaging (system.messaging.dll 内)
構文構文

Dim instance As New XmlMessageFormatter
public XmlMessageFormatter ()
public:
XmlMessageFormatter ()
public XmlMessageFormatter ()
public function XmlMessageFormatter ()
解説解説
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
XmlMessageFormatter クラス
XmlMessageFormatter メンバ
System.Messaging 名前空間

XmlMessageFormatter コンストラクタ (Type[])

XmlMessageFormatter クラスの新しいインスタンスを初期化し、オブジェクト型の配列として渡された対象の型を設定します。

名前空間: System.Messaging
アセンブリ: System.Messaging (system.messaging.dll 内)
構文構文

Public Sub New ( _
    targetTypes As Type() _
)
Dim targetTypes As Type()

Dim instance As New XmlMessageFormatter(targetTypes)
public XmlMessageFormatter (
    Type[] targetTypes
)
public:
XmlMessageFormatter (
    array<Type^>^ targetTypes
)
public XmlMessageFormatter (
    Type[] targetTypes
)
public function XmlMessageFormatter (
    targetTypes : Type[]
)

パラメータ

targetTypes

フォーマッタでメッセージから逆シリアル化できる型のセットを指定する Type 型の配列。

例外例外
例外の種類条件

ArgumentNullException

targetTypes パラメータが null 参照 (Visual Basic では Nothing) です。

解説解説

対象の型パラメータを使用するコンストラクタは、キューから読み取るときに最も頻繁に使用されます。書き込み時には、対象の型を指定する必要はありません。

この XmlMessageFormatter コンストラクタのオーバーロードは、targetTypes パラメータで渡された配列値を TargetTypes プロパティに設定します。このプロパティを設定すると、MessageQueue は、この XmlMessageFormatter インスタンスを使用して指定された型のオブジェクトが含まれているメッセージを読み取ることができます。

TargetTypeNames プロパティおよび TargetTypes プロパティの設定により、フォーマッタがメッセージの逆シリアル化時に一致させようとするスキーマが決まります。これにより、フォーマッタがメッセージ本文を解釈できます。

メッセージ本文でシリアル化されるインスタンスは、型配列で表されたスキーマの 1 つに従っている必要があります。Receive メソッドを使用してメッセージを読み取る場合は、識別されたスキーマに対応する型のオブジェクトがこのメソッドによって作成され、そこにメッセージ本文が読み込まれます。

キューから読み取るときに設定する必要があるのは、2 つのプロパティのうちの 1 つだけですが、両方を設定することもできます。型のセットとは、2 つのプロパティの型を結合したものです。どちらを使用するかは、アプリケーションによって異なります。メッセージ本文に、両方のプロパティの配列内のどの型ともスキーマが一致しない型が含まれている場合は、読み取り時に例外がスローされます。

TargetTypeNames ではなく TargetTypes を指定する場合は、読み取り時ではなくコンパイル時に型の存在を確認することで、エラーの可能性が抑制されます。TargetTypeNames では、すべてのエントリが完全に限定され、アセンブリ名が指定されている必要があります。さらに、複数のバージョンを同時に操作する場合は、対象の型名にバージョン番号も追加する必要があります。

TargetTypes を使用する場合は、次の C# コードで示される方法で、各オブジェクト (MyClass など) をリストに追加できます。

 TargetTypes = new Type[]{typeof(MyClass)}
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
XmlMessageFormatter クラス
XmlMessageFormatter メンバ
System.Messaging 名前空間

XmlMessageFormatter コンストラクタ (String[])

XmlMessageFormatter クラスの新しいインスタンスを初期化し、完全限定型の文字列値の配列として渡された対象の型を設定します。

名前空間: System.Messaging
アセンブリ: System.Messaging (system.messaging.dll 内)
構文構文

Public Sub New ( _
    targetTypeNames As String() _
)
Dim targetTypeNames As String()

Dim instance As New XmlMessageFormatter(targetTypeNames)
public XmlMessageFormatter (
    string[] targetTypeNames
)
public:
XmlMessageFormatter (
    array<String^>^ targetTypeNames
)
public XmlMessageFormatter (
    String[] targetTypeNames
)
public function XmlMessageFormatter (
    targetTypeNames : String[]
)

パラメータ

targetTypeNames

フォーマッタでメッセージから逆シリアル化できる型のセットを指定する String 型の配列。これらの値は、たとえば "MyNamespace.MyOrders, MyOrdersAssemblyName" のように完全に限定されている必要があります。

例外例外
例外の種類条件

ArgumentNullException

targetTypeNames パラメータが null 参照 (Visual Basic では Nothing) です。

解説解説

対象の型パラメータを使用するコンストラクタは、キューから読み取るときに最も頻繁に使用されます。書き込み時には、対象の型を指定する必要はありません。

この XmlMessageFormatter コンストラクタのオーバーロードは、targetTypeNames パラメータで渡された配列値を TargetTypeNames プロパティに設定します。このプロパティを設定すると、MessageQueue は、この XmlMessageFormatter インスタンスを使用して、指定された型のオブジェクトが含まれているメッセージを読み取ることができます。

TargetTypeNames プロパティおよび TargetTypes プロパティの設定により、フォーマッタがメッセージの逆シリアル化時に一致させようとするスキーマが決まります。これにより、フォーマッタがメッセージ本文を解釈できます。

メッセージ本文でシリアル化されるインスタンスは、型配列で表されたスキーマの 1 つに従っている必要があります。Receive メソッドを使用してメッセージを読み取る場合は、識別されたスキーマに対応する型のオブジェクトがこのメソッドによって作成され、そこにメッセージ本文が読み込まれます。

キューから読み取るときに設定する必要があるのは、2 つのプロパティのうちの 1 つだけですが、両方を設定することもできます。型のセットとは、2 つのプロパティの型を結合したものです。どちらを使用するかは、アプリケーションによって異なります。メッセージ本文に、両方のプロパティの配列内のどの型ともスキーマが一致しない型が含まれている場合は、読み取り時に例外がスローされます。

使用例使用例
Imports System
Imports System.Messaging
Imports System.Drawing
Imports System.IO



   
' 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

   
  
' Provides a container class for the example.

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(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()))
         
  
         ' 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

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;
        }
    }
}
#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;
ref class Order
{
public:
   int orderId;
   DateTime orderTime;
};

ref 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 );
      }

   }

   void SendMessage()
   {
      try
      {
         // Create a new order and set values.
         Order^ sentOrder = gcnew Order;
         sentOrder->orderId = 3;
         sentOrder->orderTime = DateTime::Now;

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

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

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

      return;
   }

   void ReceiveMessage()
   {
      // Connect to the a queue on the local computer.
      MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );

      // Set the formatter to indicate body contains an Order.
      array<Type^>^p = gcnew array<Type^>(1);
      p[ 0 ] = Order::typeid;
      myQueue->Formatter = gcnew XmlMessageFormatter( p );
      try
      {
         // Receive and format the message. 
         Message^ myMessage = myQueue->Receive();
         Order^ myOrder = dynamic_cast<Order^>(myMessage->Body);

         // Display message information.
         Console::WriteLine( "Order ID: {0}", myOrder->orderId );
         Console::WriteLine( "Sent: {0}", 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 = gcnew MyNewQueue;

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

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

   // Receive a message from a queue.
   myNewQueue->ReceiveMessage();
   return 0;
}
package MyProject;

import System.*;
import System.Messaging.*;
import System.Drawing.*;
import System.IO.*;

// The following example 
// sends to a queue and receives from a queue.
public class Order
{
    public int orderId;
    public DateTime orderTime;
} //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 static void main(String[]
 args)
    {
        // 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;
    } //main

    //**************************************************
    // 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.get_Message());
        }
    } //CreateQueue

    //**************************************************
    // 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.get_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.get_Message());
        }
        return;
    } //SendMessage

    //**************************************************
    // 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.set_Formatter(new XmlMessageFormatter(new
 Type[] 
            { MyProject.Order.class.ToType() }));

        try {
            // Receive and format the message. 
            Message myMessage = myQueue.Receive();
            Order myOrder = (Order)myMessage.get_Body();

            // Display message information.
            Console.WriteLine("Order ID: " + Convert.ToString(myOrder.orderId));
            Console.WriteLine("Sent: " + myOrder.orderTime.ToString());
        }
        catch (MessageQueueException exp) {
            // Handle Message Queuing exceptions.
        }
            
        // Handle invalid serialization format.
        catch (InvalidOperationException e) {
            Console.WriteLine(e.get_Message());
        }
        // Catch other exceptions as necessary.
        return;
    } //ReceiveMessage
} //MyNewQueue
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
XmlMessageFormatter クラス
XmlMessageFormatter メンバ
System.Messaging 名前空間

XmlMessageFormatter コンストラクタ

XmlMessageFormatter クラスの新しいインスタンスを初期化します。
オーバーロードの一覧オーバーロードの一覧

名前 説明
XmlMessageFormatter () 対象の型を設定せずに、XmlMessageFormatter クラスの新しいインスタンスを初期化します。

.NET Compact Framework によってサポートされています。

XmlMessageFormatter (String[]) XmlMessageFormatter クラスの新しいインスタンスを初期化し、完全限定型の文字列値の配列として渡された対象の型を設定します。

.NET Compact Framework によってサポートされています。

XmlMessageFormatter (Type[]) XmlMessageFormatter クラスの新しいインスタンスを初期化し、オブジェクト型の配列として渡された対象の型を設定します。

.NET Compact Framework によってサポートされています。

参照参照

関連項目

XmlMessageFormatter クラス
XmlMessageFormatter メンバ
System.Messaging 名前空間

XmlMessageFormatter プロパティ


パブリック プロパティパブリック プロパティ

  名前 説明
パブリック プロパティ TargetTypes 提供されたメッセージからフォーマッタで逆シリアル化できる型のセットを指定します。
参照参照

関連項目

XmlMessageFormatter クラス
System.Messaging 名前空間
MessageQueue クラス
ActiveXMessageFormatter クラス
BinaryMessageFormatter クラス
IMessageFormatter インターフェイス

XmlMessageFormatter メソッド


パブリック メソッドパブリック メソッド

プロテクト メソッドプロテクト メソッド
参照参照

関連項目

XmlMessageFormatter クラス
System.Messaging 名前空間
MessageQueue クラス
ActiveXMessageFormatter クラス
BinaryMessageFormatter クラス
IMessageFormatter インターフェイス

XmlMessageFormatter メンバ

XSD スキーマ定義の XML 書式を使用して、メッセージ本文との間でオブジェクトをシリアル化および逆シリアル化します。

XmlMessageFormatter データ型で公開されるメンバを以下の表に示します。


パブリック コンストラクタパブリック コンストラクタ
  名前 説明
パブリック メソッド XmlMessageFormatter オーバーロードされます。 XmlMessageFormatter クラスの新しいインスタンスを初期化します。
パブリック プロパティパブリック プロパティ
  名前 説明
パブリック プロパティ TargetTypes 提供されたメッセージからフォーマッタで逆シリアル化できる型のセットを指定します。
パブリック メソッドパブリック メソッド
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

XmlMessageFormatter クラス
System.Messaging 名前空間
MessageQueue クラス
ActiveXMessageFormatter クラス
BinaryMessageFormatter クラス
IMessageFormatter インターフェイス



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「XmlMessageFormatter」の関連用語

XmlMessageFormatterのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



XmlMessageFormatterのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS