次の方法で共有


メッセージのシリアル化

更新 : 2007 年 11 月

シリアル化とは、オブジェクトを取得し、そのステータス情報を保存または転送できる形式に変換するプロセスです。シリアル化の基本的な考え方は、オブジェクトが、通常はそのメンバ変数の値によって示される現在の状態を永続ストレージに書き込むということです。その後で、オブジェクトの状態をストレージから読み取る (逆シリアル化する) ことにより、オブジェクトを再作成できます。シリアル化は、オブジェクトをシリアル化するときに使用されるオブジェクト ポインタおよび循環オブジェクト参照のすべての詳細を処理します。

メッセージ キュー機能でのシリアル化とは、オブジェクトまたはデータのセットをキューに送信できるメッセージに変換し、キューから受信したメッセージをアプリケーションが処理できるオブジェクトまたはデータに再び変換するプロセスのことです。

書式指定ツール オブジェクトは、Visual Studio アプリケーションまたは .NET Framework アプリケーションでのメッセージのシリアル化を行います。メッセージがキューに送信されると、書式指定ツールはオブジェクトをシリアル化して、メッセージ キューに送信できるストリームにします。メッセージをキューから読み取るときに、書式指定ツールはメッセージ データを Body プロパティに逆シリアル化します。

送受信するデータの種類に応じて、適切な種類の書式指定ツールを選択します。Visual Studio および .NET Framework には、さまざまな種類のデータを永続化および非永続化するために設計された、次の 3 つの定義済みの書式指定ツールが用意されています。

  • XmlMessageFormatter オブジェクトは、オブジェクトおよびプリミティブ データ型を人間が読み取り可能な XML 文字列に永続化します。また、その逆の変換を行います。これは、MessageQueue コンポーネントの既定の書式指定ツール設定です。

  • BinaryMessageFormatter オブジェクトは、1 つ以上の接続されたオブジェクトをシリアル化されたストリームに永続化します。結果のストリームは非常にコンパクトになり、高速で解析できますが、人間が読み取り可能なデータではありません。

  • ActiveXMessageFormatter オブジェクトは、プリミティブ データ型を永続化することにより、以前のバージョンのメッセージ キューを使用するコンポーネントとの相互運用性を確保します。シリアル化されたデータは非常にコンパクトになります。この書式指定ツールは、Windows を対象にデザインされており、人間が読み取り可能な結果は生成しません。しかし、このシリアル化方法は高速です。

既定では、MessageQueue コンポーネントのインスタンスを作成するときに XmlMessageFormatter が作成され、インスタンスに関連付けられます。MessageQueue インスタンスに対して Send メソッドを呼び出すと、メッセージの本文がこの書式指定ツールによってシリアル化されます。送信操作時にこの書式指定ツールを使用する場合、追加のコードを記述する必要はありません。

メッセージの読み取りは、やや複雑です。書式指定ツールを使用してキューから読み取る場合は、メッセージの本文をどのように処理するかを示すプロパティを設定する必要があります。XmlMessageFormatter オブジェクトを使用している場合は、TargetTypes プロパティまたは TargetTypeNames プロパティを設定します。BinaryMessageFormatter オブジェクトを使用している場合は、別の一連のプロパティを設定します。ActiveXMessageFormatter オブジェクトには、関連付けられているプロパティはありません。詳細については、「メッセージの読み取りと受信」を参照してください。

さまざまな種類のデータを処理する必要がある場合は、Visual Studio および .NET Framework に用意されている書式指定ツールを使用する以外に、独自の書式指定ツールを作成することもできます。作成した書式指定ツールをプロジェクトにインポートし、コード内でアクセスできます。

使用する書式指定ツールを選択するには、目的のキュー、メッセージ、または MessageQueue コンポーネントの Formatter プロパティを設定します。

XML によるメッセージ書式指定の利点

XML 書式指定ツールの 1 つの利点は、オブジェクトまたはデータをシリアル化して作成された文字列を人が読み取ることができることです。これは、何か問題が発生し、メッセージがメッセージ キューからパーシスト解除できない場合に、メッセージ自体を確認して問題を解決できることを意味します。

もう 1 つの利点は、この情報によってシリアル化されたメッセージは、同じ書式指定ツール オブジェクトで逆シリアル化する必要がないことです。つまり、送信側と受信側の両方でデータ スキーマがわかっていれば、送信側で使用したのと同じ書式指定ツール クラスが受信側に存在する必要はありません。また、XML 書式指定ツールによってシリアル化されたメッセージは、必ずしも逆シリアル化する必要はありません。ほとんどのブラウザやその他の XML ビューアは、XML メッセージを解析できます。

参照

処理手順

方法 : MessageQueue コンポーネントのインスタンスを作成する

その他の技術情報

メッセージの送信とシリアル化