Part 4. IIS ホストの使い方

さて、前回の Part 3. のエントリまでで基本的な WCF サービスの開発方法を説明しましたが、ここまでのサンプルでは、すべてコンソールアプリケーションを使ってサーバを開発してきました。しかし実際の運用を想定すると、アプリケーションリスタートやプロセスリサイクリング、あるいはモニタリングといった、運用監視関係の機能を充実させる必要があり、このコンソールアプリケーションを強化してそれらの機能を持たせるのは非現実的です。このため、実運用では IIS をホストとして WCF サービスを動作させ、IIS が持つ各種の運用管理機能を活用するのが便利です。 本エントリでは、IIS ホストの使い方として、以下の項目について解説します。 .svc ファイルによる WCF サービスの開発方法 2 つの ASP.NET ランタイムとの統合方式 構成設定ファイルを使わない .svc ファイルの作り方 WPAS (Windows Process Activation Service)の使い方 [Step.15 .svc ファイルによる WCF サービスの開発方法] では、実際に Web サーバ上で動作する WCF サービスを開発してみます。まず、新規に Web サイトプロジェクトを作成します。(※ WCF サービスプロジェクトはここでは利用しません。通常の ASP.NET Web サイトプロジェクトを利用してください。) 作成されたサイトの Default.aspx ファイルは利用しませんので、削除しておきます。ここに、WCF サービスを開発していきます。 ASP.NET ランタイム上で動作する WCF サービスを開発するためには、.svc ファイルを作成します。…

2

Part 3. Hello World WCF クライアントの開発

さて、前回のエントリでは Hello World メッセージを返す WCF サーバを作成し、SOAP over HTTP でリクエストを受け付けるエンドポイントを作成しました。引き続き本エントリでは、このサーバアプリケーションを呼び出すクライアントアプリケーションを作成していくことにします。 クライアントアプリケーション作成時には、Part 2. で作成した WCF サーバを起動しておき、WSDL ファイルを入手できる状態にしておく必要があります。このため、以降の作業は Part.2 で作成した WCF サーバアプリケーションを起動した状態で作業を進めてください。 ※ Part 2. で完成させたソリューションは以下になります。 本エントリでは、以下の作業を行います。 WCF プロキシクラスの作成と利用 サービスログとトランスポートログ TCP/IP 通信への通信プロトコルの切り替え では具体的な作業手順を以下に説明したいと思います。 [Step. 10] WCF プロキシクラスの作成と利用 まず、Visual Studio 2008 をもう一つ起動し、新規にコンソールアプリケーションをひとつ作成します(名前は "Sample01.Client" にしておきます)。 ※ (参考) WCF サーバ/クライアントアプリケーションを開発する際に、サーバとクライアントのソリューションを分けるということに違和感を覚える方も多いと思います。……が、その違和感は極めてごもっともだと思います;。本来、ソリューションは「ビルドの単位」なわけで、I/F 整合性を保ってビルドされる複数のプロジェクトは同一ソリューションに含まれるべきです。SOAP over HTTP は疎結合と言われますが、スマートクライアントなどの開発においてはサーバ/クライアントは実態として密結合であることがほとんど。このため、XML Web サービスなどを使ってスマクラを作る場合には、サーバとクライアントは同一ソリューションに含める形で作るべきだと私は考えています。ところが WCF での開発の場合、サーバ側のアプリケーションがちゃんとビルド+実行できないと、MEX エンドポイントが公開できず、クライアント側でプロキシクラスを手軽に作ることができないという問題があり、サーバ/クライアントのソリューションを分けて作業しないと、恐ろしく開発作業が面倒になります(実際に一度やってみるとよいかも....かなり苦労します)。このため、(論理的には不適切だと思うのであまりお薦めしたくはないのですが開発の利便性を優先させて)、サーバ/クライアントをソリューションとして分けて開発する、という方法で説明しています。 作成したら、ここに WCF…

0

Part 2. Hello World WCF サーバの開発

では、前回のエントリに引き続いて、今回は Hello World メッセージを返す WCF サーバの開発を行ってみたいと思います。WCF のランタイムはポータブル(いろんな場所に持っていける)に設計されているのが面白いところで、IIS 上はもちろんのこと、コンソールアプリケーションや Windows サービスなどにも簡単にホストすることができるように設計されています。が、いきなりそれらの話をするも大変なので、まずはコンソールアプリケーションを使って、SOAP over HTTP のリクエストを受け付ける Hello World WCF サーバを開発する、という作業を行ってみたいと思います。 ・WCF サービスの作成 ・WCF ホストプロセスの作成 ・構成設定ファイルの作成 ・サービスビヘイビアによる MEX (Metadata Exchange) の作成 ・WCF テストツールによる WCF サーバの動作確認 なお、本サンプルでは Visual Studio 2008 に用意されている WCF ライブラリのプロジェクトテンプレートなどは一切使いません。これは以下の理由によります。 テンプレートやウィザードを使ってしまうと何をやってるのかわからくなる。 Application Architecture for .NET などの考え方に基づいて、通信インタフェース(SI)を分離するという設計モデルを取る場合、SI 内部でさらにインタフェースを分離することにはあまり意味がない。 簡単にいえば、WCF ライブラリのプロジェクトテンプレートは、従来の考え方(ビジネスロジックが直接通信機能を持つ)に近い設計モデルに基づいて作られているものだと思います(と自分は解釈している)。なので、ここではあえてプロジェクトテンプレートは利用せずに、WCF サーバを作ってみたいと思います。 ※ 以下の作業を Windows Vista や Windows 2008…

1

Part 1. WCF に導入されている新たな設計概念

では順番に、WCF について説明していってみようと思います。……が、WCF を理解する上で重要なのは、実装方法というよりも、むしろ WCF がなぜ作られたのかとか、どういう考えやモデルに基づいて作られているか、という点だと思います。そこで、Part 1. では、まず WCF が持っているいくつかのきわめて重要な設計概念についてまとめて説明してみたいと思います。 ・WCF の狙い ・エンドポイント (ABC モデル) ・WCF パイプライン(ABC モデル)と OSI 7 階層モデルの関係 ・Message オブジェクトとエンコード方式 なお、以下の説明では、ある程度リモート通信に関する基礎知識がある(例えば ASP.NET XML Web サービスを使ったことがある)方を対象として記述しています。もしリモート通信技術を全く触ったことがないという場合には、まず ASP.NET XML Web サービス(*.asmx)などを軽く学習してから本エントリをお読みいただくことをお勧めします。 ※ Part 1 は概念的に難しいので、よくわからない...という方は、Part 2 以降を読んでから、最後に戻ってきてもう一回読むとよいかと思います。 [Step. 1] WCF の狙い WCF は、様々な通信プロトコルを、同一のプログラミングモデルの中で取り扱えるようにするための仕組みです。 もともと世の中に多種多様な通信プロトコルが存在するのは、通信プロトコルに求められる要件が、アプリケーションやシステムの特性によって大きく変化するため、ひとつの通信プロトコルでは多種多様な通信に対応できないからです。 信頼性を重視しなければならない場合(一般的な業務システムとか) 付加機能を充実しなければならない場合(トランザクション引き継ぎが必要な業務システムとか) とにかく性能を重視する必要のある場合(取引システムとかオンラインゲームとか) このような理由から、世の中には様々な通信プロトコルが存在します(Windows 系に限ってみても、SOAP over HTTP, DCOM, TCP/IP, MSMQ, Service…

1