配信の拡張

配信 API は、形式に依存せず、さまざま形式で配信コンテンツをネットワークに書き込むことができるプログラミング モデルを提供することを目的としています。抽象データ モデルは、次のクラスで構成されています。

これらのクラスは、一部の名前が異なっていますが、Atom 1.0 仕様に規定されるコンストラクトに厳密にマップされています。

配信プロトコルの主な機能は拡張性です。Atom 1.0 と RSS 2.0 のどちらも、仕様で定義されていない属性と要素を配信フィードに追加できます。Windows Communication Foundation (WCF) の配信プログラミング モデルには、カスタム属性と拡張機能を扱う方法として、次のように、弱い型指定のアクセスと新しいクラスの派生が用意されています。

弱い型指定のアクセス

新しいクラスの派生によって拡張機能を追加するには、追加のコードを記述する必要があります。別の方法として、弱い型指定で拡張機能にアクセスする方法もあります。配信抽象データ モデルに定義される型にはすべて、AttributeExtensions および ElementExtensions という名前のプロパティが含まれます。ただし、SyndicationContent には AttributeExtensions プロパティがありますが、ElementExtensions プロパティはありません。この 2 つのプロパティはそれぞれ、TryParseAttribute メソッドと TryParseElement メソッドで処理されない拡張機能のコレクションです。この処理されない拡張機能にアクセスするには、SyndicationFeedSyndicationItemSyndicationLinkSyndicationPerson、および SyndicationCategoryElementExtensions プロパティで System.ServiceModel.Syndication.SyndicationElementExtensionCollection.ReadElementExtensions.String,System.String) を呼び出します。このメソッドのセットは、指定した名前と名前空間を持つ拡張機能をすべて検索し、個別に TExtension のインスタンスに逆シリアル化して TExtension オブジェクトのコレクションとして返します。

新しいクラスの派生

任意の既存抽象データ モデル クラスから、新しいクラスを派生できます。これは、対象フィードのほとんどに特定の拡張機能が含まれるアプリケーションを実装する際に行います。このトピックでは、プログラムで処理するフィードのほとんどに、MyExtension 拡張機能が含まれています。プログラミング性を向上するには、次の手順を実行します。

  • 拡張機能データを保持するクラスを作成します。この場合、MyExtension というクラスを作成します。

  • プログラミング性を向上するには、SyndicationItem から MyExtensionItem というクラスを派生させ、MyExtension 型のプロパティを公開します。

  • MyExtensionItem クラスの TryParseElement をオーバーライドし、MyExtension が読み込まれたら新しい MyExtension インスタンスをインスタンス化します。

  • MyExtensionItem クラスの WriteElementExtensions をオーバーライドし、MyExtension プロパティのコンテンツを XML ライターに書き出します。

  • SyndicationFeed から、MyExtensionFeed というクラスを派生させます。

  • MyExtensionFeed クラスの CreateItem をオーバーライドし、既定の SyndicationItem の代わりに MyExtensionItem をインスタンス化します。SyndicationFeed および SyndicationItem に、SyndicationLinkSyndicationCategory、および SyndicationPerson の各オブジェクトを生成する一連のメソッドが定義されます (たとえば、CreateLinkCreateCategoryCreatePerson など)。そのどれもが、カスタム派生クラスを作成するためにオーバーライドできます。

参照

概念

WCF 配信の概要
配信のアーキテクチャ