XmlMessageFormatter 建構函式
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
初始化 XmlMessageFormatter 類別的新執行個體。
多載
| 名稱 | Description |
|---|---|
| XmlMessageFormatter() |
初始化一個新的類別實例 XmlMessageFormatter ,未設定目標型別。 |
| XmlMessageFormatter(String[]) |
初始化該類別的新實例 XmlMessageFormatter ,設定目標型別,作為(完全限定的)字串值陣列傳遞。 |
| XmlMessageFormatter(Type[]) |
初始化該類別的新實例 XmlMessageFormatter ,並設定目標型別,並以物件型別陣列傳遞。 |
XmlMessageFormatter()
初始化一個新的類別實例 XmlMessageFormatter ,未設定目標型別。
public:
XmlMessageFormatter();
public XmlMessageFormatter();
Public Sub New ()
備註
這種建構子過載在寫入隊列時最常使用,因為寫入時不需要目標型別。
若要從佇列中讀取使用此建構子創建 XmlMessageFormatter 的實例的訊息,必須設定 TargetTypeNames or TargetTypes 屬性,讓格式化器知道要嘗試反序列化哪些類型。
當你建立一個新的 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 參數傳遞的陣列值。 設定此屬性後, MessageQueue 使用者 XmlMessageFormatter 可讀取包含特定類型物件的訊息。
和屬性都TargetTypeNamesTargetTypes告訴格式化器在反序列化訊息時應該嘗試匹配哪些結構。 這讓格式化器能夠解讀訊息內容。
訊息主體中序列化的實例必須符合類型陣列中所代表的其中一個結構。 當你使用該 Receive 方法讀取訊息時,該方法會建立一個對應於所識別結構類型的物件,並將訊息主體讀入該結構。
讀取隊列時只需要設定其中一個屬性,但你可以同時設定兩個屬性。 型別集合是兩個屬性的組合集合。 選擇哪一種會依你的申請而定。 如果訊息主體中某型態的結構與陣列中任一屬性的型別都不符,則在讀取時會拋出例外。
適用於
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 為 null。
備註
帶有目標型態參數的建構子最常用於從佇列讀取時。 撰寫時,無需指定目標類型。
建構子的過載 XmlMessageFormatter 會將屬性設定 TargetTypes 為透過 targetTypes 參數傳遞的陣列值。 設定此屬性後,使用者XmlMessageFormatter可MessageQueue讀取包含特定類型物件的訊息。
和屬性都TargetTypeNamesTargetTypes告訴格式化器在反序列化訊息時應該嘗試匹配哪些結構。 這讓格式化器能夠解讀訊息內容。
訊息主體中序列化的實例必須符合類型陣列中所代表的其中一個結構。 當你使用該 Receive 方法讀取訊息時,該方法會建立一個對應於所識別結構類型的物件,並將訊息主體讀入該結構。
讀取隊列時只需要設定其中一個屬性,但你可以同時設定兩個屬性。 型別集合是兩個屬性的組合集合。 選擇哪一種會依你的申請而定。 如果訊息主體中某型態的結構與陣列中任一屬性的型別都不符,則在讀取時會拋出例外。
當指定 TargetTypes 而非 TargetTypeNames時,型別存在性是在編譯時檢查,而非讀取時,從而降低錯誤的可能性。 TargetTypeNames 要求每個條目都必須完全合格,並指定其組裝名稱。 此外,處理多個並行版本時,版本號也必須附加在目標型別名稱後。
使用 TargetTypes時,你可以將每個物件(例如 MyClass)加入清單,以下 C# 程式碼示範。
TargetTypes = new Type[]{typeof(MyClass)}