連載:実践! WCFプログラミング第1回 WCFを使用してRSS/Atomフィーダを作成するデジタルアドバンテージ 岸本 真二郎2008/06/27 |
|
|
実際にどのように配信するか?
このWCF配信サービス・ライブラリのプロジェクトでビルドして得られる生成物は、WCFサービスのライブラリ(.DLL)である。残念ながらこれが出来上がっただけでは、実際のフィードの配信は行えない。WCFではこのサービスをホストするプロセスが必要となる。
WCFでサービスをホストするには次の2つの方法が用意されている。
- スタンドアロンで実行(ホスト)するアプリケーション(WebServiceHostクラスを使用する)を作成する
- IISでホストする
1では、WCFサービスをホストするプロセスを別途作成して実行する必要があるので、現実的なRSS/Atomフィードの配信には向いていないと思われる。ただしそのようなアプリケーションの実装は難しくなく、コンソール・アプリケーションのプロジェクトを作成して、次のように記述することでサービスを開始できる。
| ||
リスト9 コンソール・アプリケーションでRSS/Atomを配信する(上:C#、下:VB) |
WCFではHTTPプロトコルを使用するサービスに、WebサーバであるIISが利用できるので、以降では2のIISを使って配信する方法を紹介する。このほかに、Windows Vista、Windows Server 2008などで利用できるWAS(Windows Activation Service)を利用することも可能だが、ここでは省略する。
IISでフィードを配信する
IISでRSS/Atomフィードを配信するには、いくつか準備が必要となる。
■仮想ディレクトリ
適当なフォルダを用意し、さらにそこに「bin」フォルダを作成して、作成したライブラリ(SyndicationServiceLibrary1.dll)をコピーする。
次にIISの管理ツールを起動して仮想ディレクトリを作成する(仮想ディレクトリを作成する場合)。前述のフォルダを仮想ディレクトリとしてマッピングし、ASP.NETが利用できるように設定しておく(ASP.NETのバージョンは2.0を指定する)。
■サービス・ファイル(.svc)を用意
仮想ディレクトリに、拡張子が「.svc」のファイルを作成する(ファイル名は何でもよい。ここでは「feed.svc」とした)。この中には次のようにサービスを提供するクラス名を記述する。
|
■Web.configの修正
次に仮想ディレクトリのWeb.configを修正する。プロジェクトに含まれるApp.configの中の <system.serviceModel>要素すべてを、Web.configの<configuration>要素の中にコピーする。
なお、WCFで用いるプロトコルがHTTPの場合にはURLでアドレスが決まるため、<system.serviceModel>要素に含まれる<baseAddresses>要素は必要ないのだが、そのままにしておく(コメントアウトしても構わない)。
■ブラウザで動作確認
仮に仮想ディレクトリの名前を「rss」とし、仮想ディレクトリに作成した.svcファイルの名前が「feed.svc」とすると、ブラウザから、
http://localhost/rss/feed.svc/Feed1
というURLを指定すると、VS 2008でのデバッグ時に表示された内容と同様のものが表示されるはずだ。
■IISで正しく表示されない場合
ブラウザで結果が正しく表示されない場合は、.svcファイルに対応するハンドラがIISに設定されていない可能性が高い。この場合には、「IIS ホスト サービスのエラー」や「How to: Host a WCF Service in IIS」を参照して、サービスのハンドラが正しくIISに設定されているか確認していただきたい。
なお、Windows Server 2008の場合(IIS7)で、「サーバ マネージャ」の「機能の追加」により.NET Framework 3.0をインストールしている場合は、すでにホスト・サービスの設定が行われている。このため、.svcファイルのハンドラの設定は不要である。
Windows Server 2008に含まれるIISの管理ツール |
そのほか
以上の設定でIISからRSSの配信が行えるようになった。VS 2008が提供するテンプレートのプロジェクトを利用することで、フィードの中身を構築する以外は、ほとんど何の記述も付け足す必要がなかったことがお分かりいただけたことと思う。
■静的な配信:配信内容をXMLファイルとしてエクスポートする
さらに、ここで作成したRSS/Atomフィードのライブラリを使って、IISから動的にフィードを返すのではなく、フィードの内容をファイルに保存する方法を紹介しておこう。Windowsコンソール・アプリケーションのプロジェクトを作成し、先ほど作成したライブラリへの参照を追加しておく。そして以下のようなコードを記述する。
| ||
リスト10 RSSフィードをファイルに保存する(上:C#、下:VB) |
WCFのサービス・クラスでは、CreateFeedメソッドでSyndicationFeedFormatterクラスのインスタンスを返していたが、このCreateFeedメソッドをそのまま呼び出してSyndicationFeedFormatterクラスのインスタンスを取得し、WriteToメソッドを使ってXMLファイルに出力している。
このようにして出力したファイル(ここでは「rss.xml」)は、Webサーバにコピーすれば、RSSの配信が行えるようになる。この場合は単に生成されたフィードを仮想ディレクトリ(または仮想Webサーバ)に配置するだけなので、IISの設定などは不要だ(WebサーバによってはMIMEの設定が必要な場合があるかもしれない)。
IISが動作している環境からデータベースにアクセスすることが難しい場合や、リクエストを受けるたびに動的にフィードを返したくない場合は、こういった運用方法も考えられる。
INDEX | ||
実践! WCFプログラミング | ||
第1回 WCFを使用してRSS/Atomフィーダを作成する | ||
1.WCFとは?/RSS/Atomとは? | ||
2.RSS/Atomフィーダのプログラミング | ||
3.フィード本体の作成 | ||
4.実際にどのように配信するか?/IISでフィードを配信する | ||
「実践! WCFプログラミング」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|