特集
|
|
|
3. WCF(Windows Communication Foundation)活用時の考慮点
WCFは、既存の分散プログラミング・モデルであるASMX、WSE(Web Services Enhancements)、.NET Remoting、Enterprise ServicesならびにSystem.Messaging(MSMQ)を置き換える、分散アプリケーション開発のための統一プログラミング・モデルである。
WCFが提供する統一プログラミング・モデルにより、いままで通信方式ごとにプログラミング・モデルを使い分ける必要があったものが、すべてWCFを使って開発することが可能になる。しかし、通信要件ごとに適切な通信方式を選択していくことに関しては、従来と変わらず適切な設計判断をしていくことが必要だ。
●バインディングの使い分け
バージョン2.0までの.NET Frameworkでは、分散テクノロジの選択がそのまま通信方式やプロトコルの選択に直結していたが、WCFではバインディングの選択がそれに相当する。以下が標準バインディングと呼ばれる、WCFで提供されている代表的なバインディングだ。
標準バインディング
|
||||||||
トランスポート
|
HTTP(S)
|
HTTP(S)
|
HTTP
|
TCP
|
名前付きパイプ
|
MSMQ
|
MSMQ
|
|
相互運用レベル
|
Webサービス:WS-I Basic Profile
|
Webサービス:WS-*
|
Webサービス:WS-*
|
WCF⇔WCF
|
WCF⇔WCF
|
WCF⇔WCF
|
MSMQ
|
|
通信区間
|
マシン間
|
マシン間
|
マシン間
|
マシン間
|
同一マシン内
|
マシン間
|
マシン間
|
|
エンコーディング
|
テキスト(SOAP)
|
テキスト(SOAP)
|
テキスト(SOAP)
|
バイナリ
|
バイナリ
|
バイナリ
|
バイナリ/テキスト
|
|
メッセ|ジング形式
|
一方向
(Oneway) |
○
|
○
|
○
|
○
|
○
|
○
|
○
|
リクエスト/リプライ
(Request/Reply) |
○
|
○
|
○
|
○
|
○
|
×
|
×
|
|
非同期双方向
(Duplex) |
×
|
×
|
○
|
○
|
○
|
×
|
×
|
|
セッション
|
×
|
○
|
○
|
○
|
○
|
○
|
○
|
|
セキュリティ
|
トランスポートレベル
|
○
|
○
|
×
|
○
|
○
|
○
|
○
|
メッセージ・レベル
|
×
|
○
|
○
|
○
|
×
|
○
|
○
|
|
混合
(Mixed) |
×
|
○
|
-
|
○
|
×
|
○
|
○
|
|
リライアビリティ
|
×
|
○
(直接型) |
○
(直接型) |
○
(直接型) |
×
|
○
(キュー型) |
○
(キュー型) |
|
トランザクション
|
×
|
○
(直接型) |
○
(直接型) |
○
(直接型) |
○
(直接型) |
○
(キュー型) |
○
(キュー型) |
|
WCFの標準バインディング一覧 | ||||||||
メッセージング形式はメッセージの送受信方法である。一方向(Oneway)は、クライアントからサービスに対して非同期に一方的にメッセージを送信し、応答はない。リクエスト/リプライ(Request/Reply)は、クライアントからのメッセージ送信に対してサービスから同期的に応答が返る一般的なメッセージングである。非同期双方向(Duplex)は、クライアントからサービスへの一方向メッセージングと、サービスからクライアントへの一方向メッセージングを非同期に対にしたメッセージングである。 |
なお、このほかにCustomBindingというトランスポートからプロトコルまでを自由に選択可能なバインディングも提供されているが、独自のトランスポートを使用するなどの特殊なカスタマイズ要件がない限りは、上記の標準バインディングを選択することを推奨する。
開発要件によってどの標準バインディングを選択することが最適であるかはケース・バイ・ケースであるが、大まかな選択方針は以下のようになると考えられる。
通信要件 | WCFのバインディング |
異種プラットフォーム間での基本的な通信(WS-I Basic ProfileベースのWebサービス) | BasicHttpBinding |
異種プラットフォーム間での通信において、メッセージ・レベルのセキュリティや分散トランザクションなど、高度な通信要件が求められる場合(WS-*仕様ベースのWebサービス) | WSHttpBindingもしくはWSDualHttpBinding |
WCFアプリケーション間に最適化した、直接型メッセージングによる通信 | NetTcpBinding |
WCFアプリケーション間に最適化した、直接型メッセージングによる同一マシン内に限った通信 | NetNamedPipeBinding |
WCFアプリケーション間に最適化した、キュー型メッセージングによる通信 | NetMsmqBinding |
既存のMSMQベースのアプリケーションとの通信 | MsmqIntegrationBinding |
標準バインディングの選択方針 |
基本的にサービスのコントラクト(=サービスとして提供・公開するインターフェイス)はバインディングとは独立して設計していくことが可能だが、一部のバインディングはコントラクトに対して制約があるため(例えばNetMsmqBindingでは一方向型のメッセージングしかサポートしていない、など)、コントラクトの設計・実装時にはある程度、どのバインディングを適用するのかをあらかじめ想定しておく必要がある。
●既存分散テクノロジとWCFの相互運用
.NET Framework 3.0をベースに新規に分散アプリケーションを開発していく場合は、WCFを積極的に活用していくことができる。しかし、まだまだ.NET Framework 2.0ベースでのアプリケーション開発が主流であることや、すでに既存の分散テクノロジをベースに実装した分散アプリケーションが存在するなど、WCFを活用するにしても既存の分散テクノロジをベースに実装した分散アプリケーションとの共存を考えなければならないケースも多い(.NET Framework 3.0は.NET Framework 2.0をベースとしているため、既存の分散アプリケーションは、.NET Framework 3.0環境においてもそのまま動作する)。
WCFではこうしたシナリオも想定し、大半の既存の分散テクノロジとの相互運用のパスを用意している。
既存の分散テクノロジ | WCFの相互運用機能 |
ASMX 2.0 | BasicHttpBindingバインディング |
WSE 3.0 | WSHttpBindingバインディング |
MSMQ(System.Messagingなどを含む) | MsmqIntegrationBindingバインディング |
COM+サービス | COM+統合機能(COM+サービス・モデル構成ツール) |
.NET Remoting | なし |
既存の分散テクノロジに対するWCFの相互運用機能 |
既存の分散テクノロジとの相互運用性に関して1つ考慮しなければならないのは、.NET Remotingとの相互運用可能なバインディングが提供されていない点だ。
.NET Remotingの(特にバイナリ通信の)代替となるWCFのバインディングはNetTcpBindingやNetNamedPipeBindingであるが、これらのバインディングは.NET Remotingとは似て非なるものであり、相互に接続することはできない。この点はWCFが標ぼうするサービス指向の考え方「サービスの境界は明確にすること」と、.NET Remotingにおける位置透過なリモート・オブジェクトによる通信、すなわち「クライアント側が別マシンのオブジェクトを呼び出しているということを極力意識しない通信」とが相いれないものであるため致し方ないところである。
すでに.NET Remotingを使って実装されている分散アプリケーションについては、新しく改修する部分はなるべくWCFを使って実装し、サイド・バイ・サイドでWCFと.NET Remotingを併用・共存させつつ、将来的には緩やかにWCF化する方向で移行していくことを検討していただきたい。
また、いま現在どうしても.NET Remotingを使う必要がある場合は、サービス・インターフェイスやサービス・エージェント部分に.NET Remotingをラップし、.NET Remotingへの依存個所を最小限にするなど、将来WCFへの移行を見据えた設計を心掛けていただきたい。
●BizTalk ServerとWCFの関係
WCFは基本的には単一のサービスやサービスを呼び出すためのプロキシの実装をサポートするフレームワークであり、複数のサービスの連携や統合までを強力にサポートしてくれるわけではない。冒頭のアプリケーション・アーキテクチャで触れたように、WCFはサービス・インターフェイスやサービス・エージェントの実装のためのテクノロジである。
そのため、EAIやSOAなどの、サービスの統合やオーケストレーションが必要なシナリオでは、BizTalk Serverの導入を検討されたい。
現行のBizTalk Server 2006までは、ASMXによるWebサービスやMSMQアプリケーションとの接続がサポートされていたが、2007年前半にリリース予定のBizTalk Server 2006 R2では、新たにWCFアダプタの提供が予定されている。
このWCFアダプタを使用することで、WCFの持つセキュリティ、リライアビリティ、トランザクションといった品質保証機能や、WCFに特化したNetTcpBindingのようなバインディングを使用したWCFアプリケーションと、BizTalk Serverを組み合わせたEAIやSOAのシステムを構築していくことが可能になる。
INDEX | ||
[特集] .NET Framework 3.0概説(前編) | ||
.NET Framework 3.0がソフトウェア開発にもたらす価値とは? | ||
1..NET Framework 3.0とは何か? | ||
2.WPF(Windows Presentation Foundation) | ||
3.WCF(Windows Communication Foundation)、WF(Windows Workflow Foundation) | ||
4.対応プラットフォームと開発環境 | ||
[特集] .NET Framework 3.0概説(後編) | ||
.NET Framework 3.0新技術の使い分け指針 | ||
1.WPF活用時の考慮点 | ||
2.WCF活用時の考慮点 | ||
3.WF活用時の考慮点 | ||
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|