配信の拡張
配信 API は、形式に依存せず、さまざま形式で配信コンテンツをネットワークに書き込むことができるプログラミング モデルを提供することを目的としています。抽象データ モデルは、次のクラスで構成されています。
これらのクラスは、一部の名前が異なっていますが、Atom 1.0 仕様に規定されるコンストラクトに厳密にマップされています。
配信プロトコルの主な機能は拡張性です。Atom 1.0 と RSS 2.0 のどちらも、仕様で定義されていない属性と要素を配信フィードに追加できます。Windows Communication Foundation (WCF) の配信プログラミング モデルには、カスタム属性と拡張機能を扱う方法として、次のように、弱い型指定のアクセスと新しいクラスの派生が用意されています。
弱い型指定のアクセス
新しいクラスの派生によって拡張機能を追加するには、追加のコードを記述する必要があります。別の方法として、弱い型指定で拡張機能にアクセスする方法もあります。配信抽象データ モデルに定義される型にはすべて、AttributeExtensions および ElementExtensions という名前のプロパティが含まれます。ただし、SyndicationContent には AttributeExtensions プロパティがありますが、ElementExtensions プロパティはありません。この 2 つのプロパティはそれぞれ、TryParseAttribute メソッドと TryParseElement メソッドで処理されない拡張機能のコレクションです。この処理されない拡張機能にアクセスするには、SyndicationFeed、SyndicationItem、SyndicationLink、SyndicationPerson、および SyndicationCategory の ElementExtensions プロパティで 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 に、SyndicationLink、SyndicationCategory、および SyndicationPerson の各オブジェクトを生成する一連のメソッドが定義されます (たとえば、CreateLink、CreateCategory、CreatePerson など)。そのどれもが、カスタム派生クラスを作成するためにオーバーライドできます。