Windows Communication Foundation (WCF) アプリケーション モデルは、分散アプリケーションの通信要件の大部分を解決するように設計されています。 ただし、既定のアプリケーション モデルとシステム提供の実装ではサポートされないシナリオが常にあります。 WCF 機能拡張モデルは、アプリケーション モデル全体を置き換える時点であっても、すべてのレベルでシステムの動作を変更できるようにすることで、カスタム シナリオをサポートすることを目的としています。 このトピックでは、拡張機能のさまざまな領域について説明し、それぞれの詳細情報を示します。
拡張する領域
次の機能を拡張できます。
アプリケーション ランタイム。 これにより、アプリケーションのメッセージのディスパッチと処理が拡張されます。 この領域には、セキュリティ システム、メタデータ システム、シリアル化システム、および基になるチャネル システムとアプリケーションを接続するバインドとバインド要素の拡張も含まれます。
チャネルとチャネル ランタイム。 これにより、メッセージ レベルで機能するシステムが拡張され、プロトコル、トランスポート、エンコードのサポートが提供されます。
ホスト ランタイム。 これにより、ホスティング アプリケーション ドメインとチャネルとアプリケーション ランタイムの関係が拡張されます。
アプリケーション ランタイムの拡張
WCF アプリケーションでは、対応するチャネル宛てのメッセージと、アプリケーション自体宛てのメッセージが区別されます。 チャネル メッセージでは、セキュリティで保護された会話の確立や信頼できるセッションの確立など、チャネル関連の機能がいくつかサポートされています。 これらのメッセージは、アプリケーション ランタイムでは使用できません。これらは、アプリケーション レイヤーが関与する前に処理されます。
アプリケーション メッセージには、ユーザーまたは顧客が作成したクライアントまたはサービス操作宛てのデータが含まれます。 これらのメッセージは、ニーズに応じて、メッセージまたはオブジェクト形式でアプリケーション レベルの拡張システムで使用できます。
すべてのメッセージはチャネル システムを通過します。アプリケーション メッセージのみがチャネル システムからアプリケーションに渡されます。 新しいチャネル レベルの機能を作成するには、チャネル システムを拡張する必要があります。 新しいアプリケーション レベルの機能を作成するには、サービスまたはクライアント ランタイム (ディスパッチャーとチャネル ファクトリ) をそれぞれ拡張する必要があります。 アプリケーション ランタイムの拡張の詳細については、「 ServiceHost とサービス モデル レイヤーの拡張」を参照してください。
セキュリティの拡張
トークンや資格情報などのカスタム セキュリティ メカニズムを構築するには、セキュリティ システムを拡張する必要があります。 詳細については、「 セキュリティの拡張」を参照してください。
メタデータの拡張
メタデータを既定とは異なる方法で公開するには、メタデータ システムを拡張する必要があります。 詳細については、「 メタデータ システムの拡張」を参照してください。
シリアル化の拡張
カスタム エンコーダーを構築したり、データ サロゲートを提供したり、転送されたデータのカスタマイズに関連するその他の作業を行うには、シリアル化システムを拡張する必要があります。 詳細については、「 エンコーダーとシリアライザーの拡張」を参照してください。
バインドの拡張
トランスポート チャネルまたはプロトコル チャネルをアプリケーション層に関連付けるには、バインディング システムを拡張する必要があります。 詳細については、「 バインディングの拡張」を参照してください。
チャネル システムの拡張
カスタム トランスポートまたはプロトコル機能をサポートするチャネルを作成するには、「 チャネルレイヤーの拡張」を参照してください。
サービス ホスティング システムの拡張
サービス全体のアプリケーション モデルを変更するには、クラス System.ServiceModel.ServiceHostBase 拡張する必要があります。 詳細については、「 ServiceHost とサービス モデル レイヤーの拡張」を参照してください。
ホスティング アプリケーション ドメインとサービス ホストの間の関係を変更するには、 System.ServiceModel.Activation.ServiceHostFactory クラスを拡張する必要があります。 詳細については、「 ServiceHostFactory を使用したホスティングの拡張」を参照してください。