訊息序列化
更新:2007 年 11 月
序列化是取得物件並將其狀態資訊轉換為能夠儲存或傳輸的過程。序列化的基本概念是,物件將其目前狀態 (通常是由其成員變數值來指示) 寫入持續性儲存體中。此物件可以在稍後從儲存體中經由讀取或還原序列化物件狀態而被重新建立。序列化會處理您序列化物件時所用到的物件指標和循環物件參考等詳細資料。
在訊息佇列功能中,序列化這個處理序特別指的是將物件或資料集轉換為可傳送至佇列的訊息,然後將從佇列擷取的訊息轉換回您應用程式可處理的物件或資料的過程。
格式子物件會處理 Visual Studio 或 .NET Framework 應用程式中的訊息序列化。當訊息傳送至佇列時,格式子會將物件序列化為可傳送至訊息佇列的資料流。從佇列進行讀取時,格式子會將訊息資料還原序列化為 Body 屬性。
您可以針對您要傳送和接收的資料種類,選擇適當型別的格式子。Visual Studio 和 .NET Framework 提供三個預先定義的格式子,每個都是設計用來保存和取消保存不同型別的資料:
XmlMessageFormatter 會使用人們可讀取的 XML 字串,將物件和基本資料型保存為訊息或從訊息還原保存。這是 MessageQueue 元件的預設格式子設定。
BinaryMessageFormatter 物件會將一或多個連接物件保存為序列化資料流。這結果是經極度壓縮且可快速剖析的,但不是人們可讀取的。
ActiveXMessageFormatter 物件會保存基本資料型別,保留與較舊版本訊息佇列的元件互通性。產生的序列化是經極度壓縮的。這個格式子是以 Windows 為前提的情況下設計的,並不會產生人們可讀取的結果。但它卻是極為快速的序列化方法。
依預設,XmlMessageFormatter 是當您建立 MessageQueue 元件執行個體時所建立,且會與執行個體產生關聯。在 MessageQueue 執行個體上呼叫 Send 方法時,就會使用這個格式子來序列化訊息的本文。您不需要寫入任何其他程式碼就能在傳送作業時使用這個格式子。
讀取訊息會較複雜些。若要使用格式子來從佇列讀取訊息,您必須設定屬性來指示應如何處理訊息本文。如果您使用 XmlMessageFormatter 物件,即需設定 TargetTypes 或 TargetTypeNames 屬性。如果您使用 BinaryMessageFormatter 物件,即需設定一組不同的屬性。ActiveXMessageFormatter 物件沒有關聯的屬性。如需詳細資訊,請參閱讀取和接收訊息。
除了使用 Visual Studio 和 .NET Framework 所推出的格式子之外,如果您需要使用不同型別的資料,也可以建立您自己的格式子。您可以將您的格式子匯入專案並在程式碼中存取它。
您可以針對佇列、訊息或正在使用的 MessageQueue 元件設定 Formatter 屬性,來選擇所要使用的格式子。
XML 訊息格式的好處
使用 XML 格式子的好處之一是,您可以讀取在序列化物件或資料時所建立的字串。這表示如果發生問題而使得訊息無法從訊息佇列還原保存,您還是可以檢視訊息本身並試著解決問題。
另一個好處是,利用這個格式子序列化的訊息並不一定要由同樣的格式子物件來還原序列化。也就是說,接收者與傳送者的格式子類別不需要相同,只要兩邊都知道資料結構描述即可。除此之外,由 XML 格式子序列化的訊息並不一定要還原序列化。大多數的瀏覽器和其他 XML 檢視器都能夠剖析 XML 訊息。