XmlMessageFormatter クラス
アセンブリ: System.Messaging (system.messaging.dll 内)


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.Messaging.XmlMessageFormatter


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


XmlMessageFormatter メンバ
System.Messaging 名前空間
MessageQueue クラス
ActiveXMessageFormatter クラス
BinaryMessageFormatter クラス
IMessageFormatter インターフェイス
XmlMessageFormatter コンストラクタ ()
アセンブリ: System.Messaging (system.messaging.dll 内)


書き込み時には対象の型は必要ないため、このコンストラクタのオーバーロードは、キューに書き込むときに最も頻繁に使用されます。
このコンストラクタを使用して作成された XmlMessageFormatter のインスタンスを使用してキューからメッセージを読み取るには、フォーマッタが逆シリアル化する型を認識できるように、TargetTypeNames プロパティまたは TargetTypes プロパティを設定する必要があります。
新しい MessageQueue を作成すると、対象の型を設定せずに、既定の XmlMessageFormatter インスタンスが作成されます。フォーマッタはこのコンストラクタを使用して作成されるため、キューから読み取るには、フォーマッタ インスタンスの対象の型を設定する必要があります。


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


XmlMessageFormatter コンストラクタ (Type[])
アセンブリ: System.Messaging (system.messaging.dll 内)



対象の型パラメータを使用するコンストラクタは、キューから読み取るときに最も頻繁に使用されます。書き込み時には、対象の型を指定する必要はありません。
この XmlMessageFormatter コンストラクタのオーバーロードは、targetTypes パラメータで渡された配列値を TargetTypes プロパティに設定します。このプロパティを設定すると、MessageQueue は、この XmlMessageFormatter インスタンスを使用して指定された型のオブジェクトが含まれているメッセージを読み取ることができます。
TargetTypeNames プロパティおよび TargetTypes プロパティの設定により、フォーマッタがメッセージの逆シリアル化時に一致させようとするスキーマが決まります。これにより、フォーマッタがメッセージ本文を解釈できます。
メッセージ本文でシリアル化されるインスタンスは、型配列で表されたスキーマの 1 つに従っている必要があります。Receive メソッドを使用してメッセージを読み取る場合は、識別されたスキーマに対応する型のオブジェクトがこのメソッドによって作成され、そこにメッセージ本文が読み込まれます。
キューから読み取るときに設定する必要があるのは、2 つのプロパティのうちの 1 つだけですが、両方を設定することもできます。型のセットとは、2 つのプロパティの型を結合したものです。どちらを使用するかは、アプリケーションによって異なります。メッセージ本文に、両方のプロパティの配列内のどの型ともスキーマが一致しない型が含まれている場合は、読み取り時に例外がスローされます。
TargetTypeNames ではなく TargetTypes を指定する場合は、読み取り時ではなくコンパイル時に型の存在を確認することで、エラーの可能性が抑制されます。TargetTypeNames では、すべてのエントリが完全に限定され、アセンブリ名が指定されている必要があります。さらに、複数のバージョンを同時に操作する場合は、対象の型名にバージョン番号も追加する必要があります。
TargetTypes を使用する場合は、次の C# コードで示される方法で、各オブジェクト (MyClass など) をリストに追加できます。


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


XmlMessageFormatter コンストラクタ (String[])
アセンブリ: System.Messaging (system.messaging.dll 内)



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


Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


XmlMessageFormatter コンストラクタ

名前 | 説明 |
---|---|
XmlMessageFormatter () | 対象の型を設定せずに、XmlMessageFormatter クラスの新しいインスタンスを初期化します。 .NET Compact Framework によってサポートされています。 |
XmlMessageFormatter (String[]) | XmlMessageFormatter クラスの新しいインスタンスを初期化し、完全限定型の文字列値の配列として渡された対象の型を設定します。 .NET Compact Framework によってサポートされています。 |
XmlMessageFormatter (Type[]) | XmlMessageFormatter クラスの新しいインスタンスを初期化し、オブジェクト型の配列として渡された対象の型を設定します。 .NET Compact Framework によってサポートされています。 |

XmlMessageFormatter プロパティ


関連項目
XmlMessageFormatter クラスSystem.Messaging 名前空間
MessageQueue クラス
ActiveXMessageFormatter クラス
BinaryMessageFormatter クラス
IMessageFormatter インターフェイス
XmlMessageFormatter メソッド

名前 | 説明 | |
---|---|---|
![]() | CanRead | フォーマッタがメッセージを逆シリアル化できるかどうかを判断します。 |
![]() | Clone | 現在の XmlMessageFormatter インスタンスと同じ読み取り/書き込みプロパティ (対象の型のセット) の XmlMessageFormatter クラスのインスタンスを作成します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
![]() | Read | 指定されたメッセージから内容を読み取り、逆シリアル化されたメッセージを格納するオブジェクトを作成します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |
![]() | Write | オブジェクトをメッセージの本文にシリアル化します。 |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |

関連項目
XmlMessageFormatter クラスSystem.Messaging 名前空間
MessageQueue クラス
ActiveXMessageFormatter クラス
BinaryMessageFormatter クラス
IMessageFormatter インターフェイス
XmlMessageFormatter メンバ
XSD スキーマ定義の XML 書式を使用して、メッセージ本文との間でオブジェクトをシリアル化および逆シリアル化します。
XmlMessageFormatter データ型で公開されるメンバを以下の表に示します。



名前 | 説明 | |
---|---|---|
![]() | CanRead | フォーマッタがメッセージを逆シリアル化できるかどうかを判断します。 |
![]() | Clone | 現在の XmlMessageFormatter インスタンスと同じ読み取り/書き込みプロパティ (対象の型のセット) の XmlMessageFormatter クラスのインスタンスを作成します。 |
![]() | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
![]() | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
![]() | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
![]() | Read | 指定されたメッセージから内容を読み取り、逆シリアル化されたメッセージを格納するオブジェクトを作成します。 |
![]() | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
![]() | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |
![]() | Write | オブジェクトをメッセージの本文にシリアル化します。 |

名前 | 説明 | |
---|---|---|
![]() | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
![]() | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |

関連項目
XmlMessageFormatter クラスSystem.Messaging 名前空間
MessageQueue クラス
ActiveXMessageFormatter クラス
BinaryMessageFormatter クラス
IMessageFormatter インターフェイス
- XmlMessageFormatterのページへのリンク