Visual Studio 2008で標準搭載されたWindows Communication Foundation
Visual Studio 2008 徹底入門 (7)
ダウンロード サンプルファイル (26.0 KB)
前回に続き、.NET Framework 3.0から導入されたコンポーネントとVisual Studio 2008でのサポートについて解説していきます。今回扱うのは通信フレームワークであるWCF(Windows Communication Foundation)です。.NET Framework 3.5でさまざまな新機能が追加され、より実用的なサービスの提供が可能となりました。
はじめに
前回に続き、.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となります。
この記事は参考になりましたか?
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 土井 毅(ドイ ツヨシ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア

