方法 : クライアント アプリケーションを構築する
このトピックの対象は、既存のアプリケーションとの下位互換性のために残されているレガシ テクノロジに特定されています。新規の開発には、このトピックを適用しないでください。分散アプリケーションは、現在は Windows Communication Foundation (WCF) を使用して開発する必要があります。
「方法 : リモート処理が可能な型を構築する」で定義され、「方法 : ホスト アプリケーションを構築する」で作成されたアプリケーションによってホストされるリモート型のクライアントを構築するには、アプリケーションがリモート オブジェクトのクライアントとして自身を登録し、それをクライアントのアプリケーション ドメイン内にある場合と同様に呼び出す必要があります。.NET リモート処理システムは、クライアント呼び出しを受け取ってリモート オブジェクトに転送し、結果をクライアントに返します。次の手順では、基本のリモート処理クライアントを構築する方法について説明します。
注 : |
---|
このサンプル コードをビルドして実行する方法の詳細な説明については、「方法 : 基本的なリモート処理アプリケーションをコンパイルして実行する」を参照してください。 |
基本のリモート処理クライアントを構築するには
「方法 : ホスト アプリケーションを構築する」の手順に続いて、
remoting
の下にclient
という名前の新しいディレクトリを作成します。次のコード例に示すようなクライアント アプリケーション用の構成ファイルを作成し、remoting\client
ディレクトリにファイルを保存します。ファイル名は、app-name.exe.config のパターンに従う必要があります。ここでは、client.exe.config
という名前になります。次の構成ファイルでは、RemotableType
リモート オブジェクトの型情報がRemotableType
アセンブリ内にあり、オブジェクトが https://localhost:8989/RemotableType.rem にあることを、リモート処理システムに伝えます。<configuration> <system.runtime.remoting> <application> <client> <wellknown type="RemotableType, RemotableType" url="https://localhost:8989/RemotableType.rem" /> </client> </application> </system.runtime.remoting> </configuration>
この構成ファイルの URL 属性の詳細については、「アクティベーション URL」を参照してください。このアプリケーションをネットワーク上で実行する場合、クライアント構成内の localhost をリモート コンピューターの名前に置き換える必要があります。
注 : 前の構成ファイルにはわずかな設定しかありませんでしたが、.NET リモート処理を使用する場合の問題の多くは、これらの設定の一部が正しくないか、クライアント アプリケーションの構成設定に一致していないことが原因で発生します。発生しやすいのは、名前の誤入力、ポートの未指定、属性の指定漏れなどです。リモート処理アプリケーションに問題がある場合は、まず構成設定を確認してください。 選択した言語で新しいソース ファイルを作成します。main メソッドでは、クライアント構成ファイル (
client.exe.config
) の名前を渡して RemotingConfiguration.Configure を呼び出します。次に、RemotableType
のインスタンスを生成して、SayHello
メソッドを呼び出します。クライアント アプリケーションをClient.cs
またはClient.vb
としてremoting\client
ディレクトリに保存します。注 : クライアント アプリケーションは、Listener.exe アプリケーションと同じディレクトリに保存しないでください。複数のアプリケーションが同じディレクトリ内にあると、アセンブリの解決と型の解決が行われるため、リモート参照を受け取って使用しているかどうかがわからなくなります。 Public Shared Sub Main() RemotingConfiguration.Configure("Client.exe.config") Dim remoteObject As New RemotableType() Console.WriteLine(remoteObject.SayHello()) End Sub 'Main
public static void Main(){ RemotingConfiguration.Configure("Client.exe.config"); RemotableType remoteObject = new RemotableType(); Console.WriteLine(remoteObject.SayHello()); }
RemotableType.dll アセンブリを
remoting\Type
からremoting\client
にコピーします。注 : ここで、"クライアントにアセンブリをコピーしている場合は、どうすれば、リモート オブジェクトが呼び出されたことがわかるのか" という疑問が生じます。これがまさに RemotableType.SayHello()
メソッド内にConsole.WriteLine
への呼び出しを追加した理由です。リモート オブジェクトが呼び出されると、Listener プロセスのWriteLine
が実行され、呼び出されない場合はクライアント プロセスのWriteLine
が実行されます。remoting\client
ディレクトリで次のコマンドを入力して、クライアント アプリケーションをコンパイルします。vbc /r:RemotableType.dll Client.vb
csc /noconfig /r:RemotableType.dll Client.cs
2 つのコマンド プロンプトが開きます。一方では、remoting\listener ディレクトリに移動し、listener.exe を実行します。もう一方では、remoting\client ディレクトリに移動し、client.exe を実行します。クライアント側のコマンド プロンプトは、次のようになります。
C:\tmp\Remoting\client>client Hello, world
リスナー側のコマンド プロンプトは、次のようになります。
C:\tmp\Remoting\listener>listener Listening for requests. Press Enter to exit... RemotableType.SayHello() was called!
リスナーの出力結果によって、
RemotableType.SayHello()
への呼び出しを受信したことがわかります。
例
' Client.vb
Imports System
Imports System.Runtime.Remoting
Public Class Client
Public Shared Sub Main()
RemotingConfiguration.Configure("Client.exe.config")
Dim remoteObject As New RemotableType()
Console.WriteLine(remoteObject.SayHello())
End Sub 'Main
End Class 'Client
// Client.cs
using System;
using System.Runtime.Remoting;
public class Client{
public static void Main(){
RemotingConfiguration.Configure("Client.exe.config");
RemotableType remoteObject = new RemotableType();
Console.WriteLine(remoteObject.SayHello());
}
}
参照
処理手順
リファレンス
概念
リモート アプリケーションの構成
サーバー アクティベーション
その他のリソース
基本的な .NET Framework リモート処理アプリケーションの構築
ビルド日:2010-02-13