XmlMessageFormatter コンストラクター

定義

XmlMessageFormatter クラスの新しいインスタンスを初期化します。

オーバーロード

XmlMessageFormatter()

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

XmlMessageFormatter(String[])

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

XmlMessageFormatter(Type[])

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

XmlMessageFormatter()

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

public:
 XmlMessageFormatter();
public XmlMessageFormatter ();
Public Sub New ()

注釈

コンストラクターのこのオーバーロードは、キューへの書き込み時に最も頻繁に使用されます。ターゲット型は書き込み時に必要ありません。

このコンストラクターを使用して作成された のXmlMessageFormatterインスタンスを使用してキューからメッセージを読み取る場合は、 プロパティまたは TargetTypes プロパティをTargetTypeNames設定して、フォーマッタが逆シリアル化を試みる型を認識できるようにする必要があります。

MessageQueueしい を作成すると、ターゲットの型が設定されていない既定 XmlMessageFormatter のインスタンスが作成されます。 このコンストラクターを使用して作成されたフォーマッタと同様に、キューから読み取る場合は、そのフォーマッタ インスタンスのターゲット型を設定する必要があります。

適用対象

XmlMessageFormatter(String[])

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

public:
 XmlMessageFormatter(cli::array <System::String ^> ^ targetTypeNames);
public XmlMessageFormatter (string[] targetTypeNames);
new System.Messaging.XmlMessageFormatter : string[] -> System.Messaging.XmlMessageFormatter
Public Sub New (targetTypeNames As String())

パラメーター

targetTypeNames
String[]

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

例外

targetTypeNames パラメーターが null です。

#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;
}
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;
        }
    }
}
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

   
  
' 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
      
      

      ' 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
       
      

      ' 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
      
      
      
 
      ' 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
End Class

注釈

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

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

プロパティと TargetTypes プロパティのTargetTypeNames両方で、メッセージを逆シリアル化するときに照合を試みるスキーマがフォーマッタに通知されます。 これにより、フォーマッタはメッセージ本文を解釈できます。

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

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

適用対象

XmlMessageFormatter(Type[])

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

public:
 XmlMessageFormatter(cli::array <Type ^> ^ targetTypes);
public XmlMessageFormatter (Type[] targetTypes);
new System.Messaging.XmlMessageFormatter : Type[] -> System.Messaging.XmlMessageFormatter
Public Sub New (targetTypes As Type())

パラメーター

targetTypes
Type[]

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

例外

targetTypes パラメーターが null です。

注釈

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

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

プロパティと TargetTypes プロパティのTargetTypeNames両方で、メッセージを逆シリアル化するときに照合を試みるスキーマがフォーマッタに通知されます。 これにより、フォーマッタはメッセージ本文を解釈できます。

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

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

ではなく TargetTypeNamesを指定するTargetTypes場合、型の存在は読み取り時間ではなくコンパイル時にチェックされ、エラーが発生する可能性が低くなります。 TargetTypeNames では、アセンブリ名を指定して、すべてのエントリを完全修飾する必要があります。 さらに、複数の同時実行バージョンを操作する場合は、ターゲットの型名にもバージョン番号を追加する必要があります。

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

TargetTypes = new Type[]{typeof(MyClass)}  

適用対象