Windows Communication Foundation (WCF) について
Windows Communication Foundation (WCF) は、
.NET Framework 3.0 で導入された通信サブシステムであり、アプリケーションがネットワーク経由で相互に通信するためのフレームワークです。開発時のコードネームは「Indigo」と呼ばれていました。WCF は、
.NET でサポートされているどの言語でも利用可能で、
分散コンピューティングにおける
サービス指向アーキテクチャ (SOA) の原則を実装するための基盤となります。
WCF の概要
WCF は、従来の Web サービス、
.NET Remoting、分散トランザクション、メッセージキューイング (MSMQ) などの技術を統合し、単一のプログラミングモデルで分散アプリケーションを開発できるように設計されています。これにより、開発者はローカル環境、LAN、
インターネットなど、さまざまなネットワーク環境で統一された API を利用できます。また、WCF は
.NET アプリケーション向けの包括的なセキュリティモデルを提供します。
WCF は、プロセス間通信に SOAP メッセージを使用します。これにより、WCF ベースのアプリケーションだけでなく、SOAP メッセージをサポートする他のアプリケーションとの相互運用が可能になります。WCF プロセス同士の通信では、最適化された
バイナリ形式 (
.NET Binary XML) を使用することもできます。これらのメッセージは、SOAP 形式に準拠しています。
WCF は、
分散コンピューティングに SOA の原則を適用したものであり、クライアントがサービスを消費し、複数のクライアントが単一のサービスにアクセスできます。WCF サービスは通常、WSDL インターフェイスとして公開され、プラットフォームに依存せずに任意の WCF クライアントからアクセスできます。WCF は、
WS-Addressing、WS-ReliableMessaging、
WS-Security などのさまざまな WS 標準を実装しています。
WCF サービスの構成要素
WCF サービスは、以下の3つの主要な要素で構成されています。
1.
サービス (Service): サービスが提供する機能を実装するクラス。
2.
ホスト環境 (Host Environments): サービスを実行する環境。Windows Activation Services (WAS)、IIS、または任意のプロセスが利用可能。
3.
エンドポイント (Endpoints): クライアントがサービスに接続するためのインターフェース。通信はエンドポイントを通してのみ行われます。
エンドポイントは、コントラクト (Contract) 、バインディング (Binding) 、アドレス (Address) の3つの要素を持ちます。
コントラクト: サービスクラスのどのメソッドをエンドポイントを通してアクセスできるかを定義します。
バインディング: クライアントとの通信方法(プロトコル、セキュリティメカニズムなど)を指定します。
アドレス: エンドポイントの場所を示す URL です。
WCF サービスの定義
WCF サービスは、サービスをメソッドの集合として実装します。サービスコントラクト (Service Contract) は、サービスが提供する操作を定義します。データコントラクト (Data Contract) は、操作で使用されるデータの種類を記述します。コントラクトは、.NET の属性を使用して定義されます。
`ServiceContract` 属性: サービスとして公開されるクラスまたはインターフェースに付与されます。
`OperationContract` 属性: クライアントが SOAP メッセージを使用して呼び出すことができるメソッドに付与されます。これらの属性により、WSDL 記述が自動的に生成されます。
`DataContract` 属性: サービスで使用されるデータの型を定義します。クラスや構造体に付与します。
サービスコントラクトは、複数の
.NET インターフェースとして定義することも可能です。また、サービスコントラクトには明示的または暗黙的なデータコントラクトが対応しており、サービスが使用するデータを定義します。WCF は単純な型(
整数、
浮動小数点数など)に対しては自動的にデータコントラクトを定義しますが、複雑なオブジェクトや構造体に対しては明示的な定義が必要です。
サービスと操作の振る舞いは、それぞれ `ServiceBehavior` 属性と `OperationBehavior` 属性で制御します。これらの属性には、並行処理モードやインスタンスモードを制御するプロパティが含まれています。
エンドポイントの定義
WCF クライアントは、エンドポイントを通して WCF サービスと接続します。エンドポイントは、アドレス (Address)、バインディング (Binding)、コントラクト (Contract) の3つの要素から構成されており、これらは "ABC" と呼ばれることがあります。バインディングは、
通信プロトコルやセキュリティ設定などを指定します。WCF は、SOAP over HTTP、SOAP over TCP、SOAP over Message Queues など、一般的な
通信プロトコルに対して事前に定義されたバインディングを提供しています。
クライアントがエンドポイントを通してサービスにアクセスする場合、コントラクトだけでなく、バインディングで指定された通信方法にも従う必要があります。クライアントとサーバーには、互換性のあるエンドポイントが存在することが必須です。
サービスとの通信
クライアントから見ると、WCF サービスとの通信はメソッド呼び出しのように見えますが、実際にはリモートプロシージャコール (RPC) のメカニズムを使用しています。クライアントは、プロキシオブジェクトを介してサービスと通信します。このプロキシは、サービスのエンドポイントとの接続を抽象化し、メソッド呼び出しをサービス要求に変換し、結果をクライアントに返します。WCF はプロキシオブジェクトの生成を自動的に処理します。
WCF は、メッセージングを使用した通信もサポートしています。メッセージングでは、必ずしもプロキシオブジェクトを使用する必要はありません。メッセージキューを使用することで、サービスが一時的にダウンしている場合でも、クライアントアプリケーションは実行を継続できます。
.NET Core への移植
WCF アプリケーションは、現在、ASP
.NET Core gRPCへの移行が推奨されています。
.NET Foundation による
.NET Core ベースの WCF 互換
ライブラリが提供されていますが、これはクライアントサイドのみのサブセットです。サーバーサイド (WCF サービスのホスト) を含めた WCF を
.NET Core に移植するコミュニティベースの取り組みとして、Core WCF プロジェクトが立ち上げられています。
まとめ
WCF は、
分散コンピューティングにおける
サービス指向アーキテクチャを実装するための強力なフレームワークです。柔軟な設定、多様なプロトコルサポート、メッセージング機能により、複雑な分散アプリケーションの開発を効率化します。しかし、
.NET Coreへの移行が進んでいる現在では、gRPCなどの新しい技術への移行も検討する必要があるでしょう。
関連項目
Mono - Mono 2.6 から WCF をサポートしています。
.NET Framework
Windows Vista
参考文献
Microsoft Windows Communication Foundation: Hands-On, Craig McMurtry, Marc Mercuri, and Nigel Watling, SAMS Publishing, May 26, 2006. ISBN 0-672-32877-1
外部リンク
Windows Communication Foundation - WCF | Microsoft Docs
Windows Communication Foundation, Microsoft の WCF 情報サイト(英語)