はじめに
前回に続き、.NET Framework 3.0から導入されたコンポーネントとVisual Studio 2008でのサポートについて解説していきます。今回扱うのは通信フレームワークであるWCF(Windows Communication Foundation)です。.NET Framework 3.5でさまざまな新機能が追加され、より実用的なサービスの提供が可能となりました。
対象読者
- VS 2008に興味がある方
- WCFに興味がある方
- .NET技術でのWebサービス構築に興味がある方
必要な環境
シリーズ第1回を参考に、Visual Studio 2008のインストールを行ってください。
WCFについて
WCFは.NET Framework 3.0で導入された統合通信フレームワークです。
WCF導入前に存在したさまざまな通信フレームワークは、相互に互換性が無く、通信方式を簡単に差し替えることはできませんでした。例えば、.NETコンポーネント間で使われているTCPベースの.NET Remotingで構築したアプリケーションを、SOAPベースのWebサービスに対応させようとするなら、通信部分について、多くの書き換えが必要になっていました。
WCFはこうした複数の通信フレームワークを統合しており、共通のアプローチで複数の通信方式を扱うことができます。
具体的には
やや抽象的な話になってしまいましたが、具体的にはどんな効能があるのでしょうか。WCFはRPC(Remote Procedure Call:遠隔手続呼出)の一種であり、ネットワークを介してアプリケーション同士がお互いの公開する処理を相互に呼び出すための仕組みです。
これでもまだ抽象的です。「アプリケーション同士」とか「お互いの公開する処理」といった部分は、具体的には何を指すのでしょうか? 一番身近に感じられるWCFのユースケースは「WebサーバとWebブラウザ」あるいは「Webサーバ同士」が、「Webサービス」を公開する/呼び出すために使用する、というものでしょう。
- エンタープライズシステムで、Microsoft Message Queuingを使ったメッセージキューサービスを使用するため
- P2P(Peer to Peer)通信をサポートするため
- .NET Remotingで相互通信を行っていたアプリケーションをWCFベースの処理に移行するため
.NET Framework 3.0では、SOAPベースのXML Webサービスのみがサポートされていましたが、.NET Framework 3.5の新機能として、WCF Webプログラミング モデルがサポートされ、SOAPを使わない簡潔な方式の、いわゆる「RESTスタイル」のWebサービスや、AJAXでしばしば用いられるJSON(JavaScript Object Notation)形式のサポート、RSS/ATOMを使った配信のサポートなどが追加され、Webサービスの構築において、より実際的なフレームワークとなりました。
RESTの定義はさまざまありますが、本記事では次のような条件を満たすサービスをRESTスタイルのWebサービスとして扱います。
- ステートレスな(状態を持たない)プロトコル
- すべてのリソースはURIで一意に表される
- HTTPの基本操作(GET/PUT/DELETEなど)を用いる
- SOAPのようにメッセージの厳密な抽象化を行わず、XMLを直接扱う
本記事では、WCFの基本概念を説明した後に、SOAPベースのWebサービスの公開、RESTスタイルのWebサービスの公開、JSON形式のサポートなどのサンプルを見ていきます。
特に、WCFでWebサービスを提供することを主眼に記事を進めていきますので、WCFでクライアント側の処理を実装する部分については省略します。
WCFがサポートする通信方式
WCFは特定の通信方式に依存しないフレームワークで、現在のところ以下の通信方式をサポートしています。
通信方式 | 概要 | 相互運用性 |
TCP | TCP/IPベースのテキスト/バイナリ通信 | WCFコンポーネント |
HTTP | HTTPベースで、SOAPを使ったXML Web Services(Basic-ProfileないしはWebサービス拡張仕様)や、RESTスタイルのWebサービス、JSONなどをサポート | Webサービス(SOAP/REST/JSONなど)をサポートするアプリケーション |
名前付きパイプ | 名前付きパイプを使用する通信方式 | 同一マシン内のWCFコンポーネント同士 |
MSMQ | Microsoft Message Queuingを使用する通信方式 | WCFコンポーネント/MSMQをサポートするアプリケーション |
Peer to Peer | Windows Peer-to-Peer Networkingを使用する通信方式 | WCFコンポーネント |
さまざまな通信方式がサポートされていますが、相互運用性の観点からすると、HTTPベースのWebサービスを使うケースが多いでしょう。WCFを使えば、必要に応じて以上の通信方式を切り替える、ないしは共存させることができます。
WCFはABC(Address , Binding , Contract)という基本的な概念を導入することで、通信方式とロジックの分離を図り、通信方式の切り替えを容易にしています。
まずはこれらの概念を確認しておきましょう。
WCFのキーワード:ABC(+Bv)=E
WCFの基本的な概念を表すキーワードが「ABC(+Bv)=E」です。
ABC(+Bv)は「どこで(A:Address)、どのように(B:Binding , Bv:Behavior)、何を(C:Contract)」提供するかを表すキーワードの集合です。これらで構成されたサービスの提供口をエンドポイント(E:Endpoint)と呼びます。
頭文字 | キーワード | 意味 |
A | Address | サービスを提供する場所 |
B | Binding | サービスで使用するデータの表現形式 |
C | Contract | サービス内容の定義 |
Bv | Behaivor | サービスの細かな挙動 |
E | Endpoint | ABC(+Bv)で構成されたサービスの提供口 |
それぞれのキーワードについて説明していきましょう。
A:Address
「どこでサービスを提供するか」を表すAはAddress(アドレス)の略で、サービスを提供するURIを表します。WCFサービスを利用するクライアントはこのURIに対してリクエストを発行することになります。
以下にアドレスの例を示します。
使用する通信方式 | URI |
HTTP | http://somehost:8080/BasicService |
TCP | net.tcp://somehost:8081/TcpService |
名前付きパイプ | net.pipe://somehost/NamedPipeService |
本記事で解説するWebサービスの場合は、HTTP/HTTPSプロトコルを使ったURIがAddressとなります。