XmlMessageFormatter Konstruktory

Definicja

Inicjuje nowe wystąpienie klasy XmlMessageFormatter.

Przeciążenia

XmlMessageFormatter()

Inicjuje nowe wystąpienie klasy bez ustawionych XmlMessageFormatter typów docelowych.

XmlMessageFormatter(String[])

Inicjuje XmlMessageFormatter nowe wystąpienie klasy, ustawiając typy docelowe przekazywane jako tablicę (w pełni kwalifikowanych) wartości ciągów.

XmlMessageFormatter(Type[])

Inicjuje XmlMessageFormatter nowe wystąpienie klasy, ustawiając typy docelowe przekazywane jako tablicę typów obiektów.

XmlMessageFormatter()

Inicjuje nowe wystąpienie klasy bez ustawionych XmlMessageFormatter typów docelowych.

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

Uwagi

To przeciążenie konstruktora jest najczęściej używane podczas zapisywania w kolejce, ponieważ typy docelowe nie są wymagane podczas zapisywania.

Aby odczytać komunikat z kolejki przy użyciu wystąpienia utworzonego XmlMessageFormatter przy użyciu tego konstruktora, należy ustawić TargetTypeNames właściwości lub TargetTypes , aby formatator wiedział, jakie typy mają podjąć próbę deserializacji.

Podczas tworzenia nowego MessageQueuewystąpienia domyślnego XmlMessageFormatter zostanie utworzone bez ustawionego typu docelowego. Podobnie jak w przypadku programu formatującego utworzonego przy użyciu tego konstruktora, należy ustawić typy docelowe dla tego wystąpienia formatatora, jeśli chcesz odczytać z kolejki.

Dotyczy

XmlMessageFormatter(String[])

Inicjuje XmlMessageFormatter nowe wystąpienie klasy, ustawiając typy docelowe przekazywane jako tablicę (w pełni kwalifikowanych) wartości ciągów.

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

Parametry

targetTypeNames
String[]

Tablica typu String , która określa zestaw możliwych typów, które będą deserializowane przez formatator z dostarczonego komunikatu. Te wartości muszą być w pełni kwalifikowane, na przykład "MyNamespace.MyOrders, MyOrdersAssemblyName".

Wyjątki

Parametr targetTypeNames to null.

Przykłady

#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

Uwagi

Konstruktory z parametrami typu docelowego są najczęściej używane podczas odczytywania z kolejki. Podczas pisania nie trzeba określać typów docelowych.

To przeciążenie konstruktora XmlMessageFormatter ustawia TargetTypeNames właściwość na wartości tablicy przekazywane przez targetTypeNames parametr . Ustawienie tej właściwości umożliwia MessageQueue używanie tego XmlMessageFormatter wystąpienia do odczytywania komunikatów zawierających obiekty danego typu.

TargetTypeNames Właściwości i TargetTypes informują formater, jakie schematy mają być zgodne podczas deserializacji komunikatu. Dzięki temu program formatujący może interpretować treść komunikatu.

Wystąpienie serializowane w treści komunikatu musi być zgodne z jednym ze schematów reprezentowanych w tablicy typów. Podczas odczytywania komunikatu Receive przy użyciu metody metoda tworzy obiekt typu odpowiadającego zidentyfikowaniu schematu i odczytuje do niego treść komunikatu.

Podczas odczytywania z kolejki należy ustawić tylko jedną z dwóch właściwości, ale można ustawić obie te właściwości. Zestaw typów jest zestawem połączonym z dwóch właściwości. Decyzja, której użyć, jest specyficzna dla twojej aplikacji. Jeśli treść komunikatu zawiera typ, którego schemat nie pasuje do żadnego z typów w tablicy dla każdej właściwości, wyjątek zostanie zgłoszony w czasie odczytu.

Dotyczy

XmlMessageFormatter(Type[])

Inicjuje XmlMessageFormatter nowe wystąpienie klasy, ustawiając typy docelowe przekazywane jako tablicę typów obiektów.

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

Parametry

targetTypes
Type[]

Tablica typu Type , która określa zestaw możliwych typów, które będą deserializowane przez formatator z dostarczonego komunikatu.

Wyjątki

Parametr targetTypes to null.

Uwagi

Konstruktory z parametrami typu docelowego są najczęściej używane podczas odczytywania z kolejki. Podczas pisania nie trzeba określać typów docelowych.

To przeciążenie konstruktora XmlMessageFormatter ustawia TargetTypes właściwość na wartości tablicy przekazywane przez targetTypes parametr . Ustawienie tej właściwości umożliwia MessageQueue używanie tego XmlMessageFormatter wystąpienia do odczytywania komunikatów zawierających obiekty danego typu.

TargetTypeNames Właściwości i TargetTypes informują formater, jakie schematy mają być zgodne podczas deserializacji komunikatu. Dzięki temu program formatujący może interpretować treść komunikatu.

Wystąpienie serializowane w treści komunikatu musi być zgodne z jednym ze schematów reprezentowanych w tablicy typów. Podczas odczytywania komunikatu Receive przy użyciu metody metoda tworzy obiekt typu odpowiadającego zidentyfikowaniu schematu i odczytuje do niego treść komunikatu.

Podczas odczytywania z kolejki należy ustawić tylko jedną z dwóch właściwości, ale można ustawić obie te właściwości. Zestaw typów jest zestawem połączonym z dwóch właściwości. Decyzja, której użyć, jest specyficzna dla twojej aplikacji. Jeśli treść komunikatu zawiera typ, którego schemat nie pasuje do żadnego z typów w tablicy dla każdej właściwości, wyjątek zostanie zgłoszony w czasie odczytu.

Podczas określania TargetTypes , a nie TargetTypeNames, istnienie typu jest sprawdzane w czasie kompilacji, a nie w czasie odczytu, zmniejszając możliwość wystąpienia błędu. TargetTypeNames wymaga, aby każdy wpis był w pełni kwalifikowany, określając jego nazwę zestawu. Ponadto podczas pracy z wieloma współbieżnymi wersjami numer wersji należy również dołączyć do nazwy typu docelowego.

W przypadku korzystania z programu TargetTypesmożna dodać każdy obiekt (na przykład MyClass) do listy w sposób pokazany za pomocą następującego kodu w języku C#.

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

Dotyczy