配信のアーキテクチャ
配信 API は、形式に依存せず、さまざま形式で概要コンテンツをネットワークに書き込むことができるプログラミング モデルを提供することを目的としています。 抽象データ モデルは、次のクラスで構成されています。
これらのクラスは、一部の名前が異なっていますが、Atom 1.0 仕様に規定されるコンストラクトに厳密にマップされています。
Windows Communication Foundation (WCF) では、配信フィードはその戻り値の型が SyndicationFeedFormatter の派生クラスの 1 つである別の種類のサービス操作としてモデル化されています。 フィードの取得は要求/応答のメッセージ交換としてモデル化されています。 クライアントはサービスに要求を送信し、サービスがこれに応答します。 要求メッセージはインフラストラクチャ プロトコル (生の HTTP など) 上に設定され、応答メッセージは広く認識されている配信形式 (RSS 2.0 または Atom 1.0) から構成されるペイロードを含んでいます。 このようなメッセージ交換を実装するサービスは、配信サービスと呼ばれます。
配信サービスのコントラクトは、SyndicationFeedFormatter クラスのインスタンスを返す一連の操作から構成されます。 配信サービスのインターフェイス宣言の例を次に示します。
[ServiceContract]
[ServiceKnownType(typeof(Atom10FeedFormatter))]
[ServiceKnownType(typeof(Rss20FeedFormatter))]
public interface IBlog
{
[OperationContract]
[WebGet(UriTemplate="GetBlog?format={format}", BodyStyle=WebMessageBodyStyle.Bare)]
SyndicationFeedFormatter GetBlog(string format);
}
配信のサポートは、WebHttpBinding バインディングを定義する WCF REST プログラミング モデル上に組み込まれています。このバインディングを WebHttpBehavior と共に使用すると、フィードをサービスとして利用できるようになります。 WCF REST プログラミング モデルの詳細については、「WCF Web HTTP プログラミング モデルの概要」を参照してください。
Note
Atom 1.0 仕様では、date コンストラクトで小数秒を指定できます。 シリアル化および逆シリアル化する場合、WCF の実装では小数秒は無視されます。
オブジェクト モデル
配信のオブジェクト モデルは、次の各表に示すクラスのグループから構成されています。
形式設定クラス
クラス | 説明 |
---|---|
Atom10FeedFormatter | SyndicationFeed インスタンスを Atom 1.0 形式にシリアル化するクラス。 |
Atom10FeedFormatter<TSyndicationFeed> | SyndicationFeed 派生クラスを Atom 1.0 形式にシリアル化するクラス。 |
Atom10ItemFormatter | SyndicationItem インスタンスを Atom 1.0 形式にシリアル化するクラス。 |
Atom10ItemFormatter<TSyndicationItem> | SyndicationItem 派生クラスを Atom 1.0 形式にシリアル化するクラス。 |
Rss20FeedFormatter | SyndicationFeed インスタンスを RSS 2.0 形式にシリアル化するクラス。 |
Rss20FeedFormatter<TSyndicationFeed> | SyndicationFeed 派生クラスを RSS 2.0 形式にシリアル化するクラス。 |
Rss20ItemFormatter | SyndicationItem インスタンスを RSS 2.0 形式にシリアル化するクラス。 |
Rss20ItemFormatter<TSyndicationItem> | SyndicationItem 派生クラスを RSS 2.0 形式にシリアル化するクラス。 |
オブジェクト モデル クラス
クラス | 説明 |
---|---|
SyndicationCategory | 配信フィードのカテゴリを表すクラス。 |
SyndicationContent | 配信コンテンツを表す基本クラス。 |
SyndicationElementExtension | 配信要素拡張を表すクラス。 |
SyndicationElementExtensionCollection | SyndicationElementExtension オブジェクトのコレクション。 |
SyndicationFeed | トップレベルのフィード オブジェクトを表すクラス。 |
SyndicationItem | フィード項目を表すクラス。 |
SyndicationLink | 配信フィードまたは項目内のリンクを表すクラス。 |
SyndicationPerson | Atom Person コンストラクトを表すクラス。 |
SyndicationVersions | サポートされる配信プロトコルのバージョンを表すクラス。 |
TextSyndicationContent | エンド ユーザーに表示される任意の SyndicationItem コンテンツを表すクラス。 |
TextSyndicationContentKind | テキスト配信コンテンツでサポートされる各種の型を表す列挙型。 |
UrlSyndicationContent | 別のリソースへの URL から構成される配信コンテンツを表すクラス。 |
XmlSyndicationContent | ブラウザーに表示されない配信コンテンツを表すクラス。 |
オブジェクト モデル内における抽象化コア データは Feed と Item であり、SyndicationFeed クラスと SyndicationItem クラスに対応します。 Feed は、フィード レベルのメタデータの一部 (Title、Description、Author など)、未知の拡張を格納する場所、およびフィードの情報コンテンツの残りの部分を作成する一連の項目を公開します。 Item では、項目レベルのメタデータの一部 (Title、Summary、PublicationDate など)、未知の拡張を格納する場所、および項目の情報コンテンツの残りの部分を含むコンテンツ要素を利用できます。 Feed と Item のコア抽象化は、Atom 1.0 および RSS の仕様で参照されている共通データ コンストラクトを表す追加のクラスによってサポートされています。
Feed インスタンスに含まれる情報は、各種の XML 形式に変換できます。 XML との間の双方向の変換処理は、SyndicationFeedFormatter クラスによって管理されます。 このクラスは抽象クラスであり、具体的な実装は Atom 1.0 および RSS 2.0 (Atom10FeedFormatter および Rss20FeedFormatter) で提供されます。 Feed の派生クラスを使用するには、派生した Feed クラスを特定できるように Atom10FeedFormatter<TSyndicationFeed> または Rss20FeedFormatter<TSyndicationFeed> のいずれかを使用します。 Item の派生クラスを使用するには、派生した Item クラスを特定できるように Atom10ItemFormatter<TSyndicationItem> または Rss20ItemFormatter<TSyndicationItem> のいずれかを使用します。各種の配信形式をサポートするために、サード パーティでは SyndicationFeedFormatter の独自の実装を派生することができます。
機能拡張
- 配信プロトコルの主な機能は拡張性です。 Atom 1.0 と RSS 2.0 では、仕様で定義されていない属性および要素を配信フィードに追加できます。 WCF の配信プログラミング モデルには、カスタム属性と拡張機能を扱う方法として、新しいクラスの派生と弱い型指定のアクセスの 2 つの方法が用意されています。 詳細については、配信の拡張に関するページを参照してください。