Windows Communication Foundation は .NET Framework 3.0 で追加された3つの主軸ライブラリの1つで、 サービス志向の通信基盤ライブラリです。 WCF と略します。
WCF を使えば、開発者はどうやって通信を行うか(how)を意識せず、何をサービスとして提供するか(what)にだけ集中することができます。 C# 3.0 の LINQ にしてもそうなんですが、 「how から what へ」というのが .NET Framework 3.0 / 3.5 の1つのテーマです。
具体的には、 普通のクラスライブラリに所定の属性を付けるだけで実装した機能を WCF サービスとして公開することができます。
サービス指向アーキテクチャ(SOA: service oriented architecture)というのが何かは、 詳しくはネットで検索してもらうとして、要点だけあげると以下のような感じです。
ASP.NET を使った XML ウェブサービスなどは SOA の具体例の1つです。
サービスが小分けにされていて、サービス間の通信方式を標準化しているので、 サービス間の依存性が低くて、 あるサービスの変更が他のサービスに与える影響が小さくなっています。 このような特徴は、SOA の利点の1つで、loosely-coupled(緩結合)と呼んだりします。
サービスを作る際に考えるべき要素として、以下の3つのものがあります。
これら3つを合わせて「ABC」と言ったりもします。
このうち、サービスを実装する際に1番注力したいのは Contract(what)の部分です。 Address や Binding に関しては、以下のような要望があります。
ということで、 WCF は Contract に注力できるように設計されています。
前節で上げたサービスの ABC の組み合わせをエンドポイント(endpoint: 接続の端点)といいます。 サーバ・クライアント間の通信をケーブルに見立てたとき、ケーブルの差し込み口に相当するのがエンドポイントです。
1つのサーバが複数のエンドポイントを持てる。
WCF では
[ServiceContract(
CallbackContract = typeof(IGameCharacterCallback),
SessionMode = SessionMode.Required)]
public interface IGameCharacter
{
/// <summary>
/// キャラを動かします。
/// </summary>
/// <param name="movement">移動量。</param>
[OperationContract(IsOneWay = true)]
void Move(System.Windows.Vector movement);
}
[ServiceContract]
public interface IGameCharacterCallback
{
/// <summary>
/// キャラの現在位置を設定します。
/// </summary>
/// <param name="location">キャラの現在位置。</param>
[OperationContract(IsOneWay = true)]
void SetLocation(System.Windows.Point location);
}
サンプル: WcfGameSample.zip
次節以降で、サンプルの中身にそって WCF を解説
キャラクターの位置をサーバ側で管理。 複数のクライアントで位置を共有。
クライアント側
- Contract は単なるクラスライブラリなので、
WCF を通さず、スタンドアローンでも使える
- WCF クライアントにしたければ、ChannelFactory クラスなどを使う
サーバ側
- デバッグ用のホストプログラム
- IIS によるホスト
- セルフホスト
要約資料(pptx)