.NET リモート処理は、.NET Framework を使用してアプリケーション ドメイン間の通信を実現する方法のうちの 1 つです。分散アプリケーションの開発モデルを選択する前に、アプリケーションにどのような機能が必要かを判断し、どのようなリソースを使用できるのかを考慮してください。ガイダンスについては、「.NET での通信オプションの選択」を参照してください。基本的な .NET リモート処理アプリケーションを作成するための主要な手順を、以下のタスクのリストに示します。
管理タスク
アプリケーション ドメインの外部から使用するサービスを公開するために必要な手順を次に示します。
サービスをデザインします。
- ホスト アプリケーション ドメインを選択します。
- アクティベーション モデルを選択します。
- チャネルおよびポートを選択します。
- クライアントがサービスのメタデータを取得する方法を決定します。
ホスト アプリケーション ドメインを実装します。リモート処理ホストには、Windows サービス、コンソール アプリケーション、Windows フォーム アプリケーション、インターネット インフォメーション サービス (IIS: Internet Information Services) プロセス、ASP.NET アプリケーションを使用できます。アプリケーションの種類ごとに要件が異なるため、使用するアプリケーションの種類の構築方法を説明したドキュメントを読む必要があります。詳細については、「アプリケーションの構築」を参照してください。
ホストで、リモート処理システムのアクティベーション モードと、アプリケーション名やエンドポイントなどのその他の情報を設定します。プログラムを使ってシステムを設定する場合は、構成ファイルを使用する必要はありません。構成ファイルを使用する場合は、RemotingConfiguration.Configure を呼び出して、その構成ファイルをシステムに読み込む必要があります。
ホストで、適切なチャネルを生成し、ChannelServices.RegisterChannel を呼び出して、そのチャネルをシステムに登録します。構成ファイルを使用する場合は、RemotingConfiguration.Configure を呼び出して、その構成ファイルをシステムに読み込む必要があります。
ホストは公開されたクラスなしでは実行できませんが、サービスの実装を使ってホスト環境を構築する方法は、サービスのパブリック インターフェイスの共有方法によって異なります。
HttpChannel と既定の SOAP シリアル化を使用して XML Web サービスを実装する場合、クライアントは情報を次の 3 つの方法で取得できます。
Soapsuds ツール (Soapsuds.exe) を使用して、エンドポイントから情報を抽出する方法。
メタデータを保持しているアセンブリをダウンロードする方法。
インターフェイスのソース コードをダウンロードする方法。
**メモ **ソース コードを使用する方法は、2 つの場合に役立ちます。サーバー アクティベーションを使用する場合は、サーバー上での実装と同じ名前のアセンブリにソース コードをコンパイルして組み込む場合に限り、実装、抽象クラス、インターフェイスのソース コードを使用できます。型 ID は、型名とアセンブリ名の両方に基づきます。クライアント アクティベーションを使用する場合は、実際のサーバー実装と外見上は等しいクラスを作成する必要があります。特にクライアント クラスは、サーバー上のクラスと同じ名前のアセンブリ内に配置し、同じクラス宣言を行い、同じシグネチャのメンバを持つ必要があります。代理クライアント クラスの実装には関係なく、メタデータが一致すると、リモート サーバーが呼び出されます。Soapsuds.exe を使用すると、クライアントの代理クラスを自動的に生成できます。
たとえば TcpChannel を使用して、別のタイプのサービスを実装する場合、クライアントは情報を次の 2 つの方法で取得できます。
メタデータを保持しているアセンブリをダウンロードする方法。
インターフェイスのソース コードをダウンロードする方法。
**メモ **ソース コードを使用する方法は、2 つの場合に役立ちます。サーバー アクティベーションを使用する場合は、すべてのバージョン管理情報を含め、サーバー上での実装と同じ名前のアセンブリにソース コードをコンパイルして組み込む場合に限り、実装、抽象クラス、インターフェイスのソース コードを使用できます。型 ID は、型名情報とアセンブリ名情報の両方に基づきます。クライアント アクティベーションを使用する場合は、実際のサーバー実装と外見上は等しいクラスを作成する必要があります。特にクライアント クラスは、サーバー上のクラスと同じ名前のアセンブリ内に配置し、同じクラス宣言を行い、同じシグネチャのメンバを持つ必要があります。代理クライアント クラスの実装には関係なく、メタデータが一致すると、リモート サーバーが呼び出されます。
どちらの場合も、サービスを管理アプリケーション ドメインにパッケージ化する方法は、他の開発者がそのサービスを利用するために必要なメタデータの公開方法によって異なります。
クライアントでのタスク
アプリケーション ドメインの外部から使用するサービスを利用するために必要な基本的手順を次に示します。
- クライアントをデザインします。
- クライアント アプリケーション ドメインを選択します。
- アクティベーション モードと、リモート型のクライアント アクティベーション URL または既知のオブジェクトの URL を決定します。
- チャネルおよびポートを登録する必要があるかどうかを検討します。
- リモート型のメタデータを取得します。
- クライアント アプリケーション ドメインを実装します。リモート処理ホストには、Windows サービス、コンソール アプリケーション、Windows フォーム アプリケーション、インターネット インフォメーション サービス (IIS: Internet Information Services) プロセス、ASP.NET アプリケーションを使用できます。アプリケーションの種類ごとに要件が異なるため、使用するアプリケーションの種類の構築方法を説明したドキュメントを読む必要があります。詳細については、「アプリケーションの構築」を参照してください。
- 決定したアクティベーション モードと、アプリケーション名やオブジェクト URI (Uniform Resource Identifier) などのその他の型情報を使用して、クライアントのリモート処理システムを設定します。プログラムを使ってシステムを設定する場合は、構成ファイルを使用する必要はありません。構成ファイルを使用する場合は、RemotingConfiguration.Configure を呼び出して、その構成ファイルをシステムに読み込む必要があります。
- 適切なチャネルを生成し、ChannelServices.RegisterChannel を呼び出して、そのチャネルをシステムに登録します。構成ファイルを使用する場合は、RemotingConfiguration.Configure を呼び出して、その構成ファイルをシステムに読み込む必要があります。
参照
基本的な .NET リモート処理アプリケーションの構築 | .NET での通信オプションの選択 | .NET リモート処理の概要 | リモート処理の例