方法 : クライアント アプリケーションを構築する
「方法 : リモート処理が可能な型を構築する」で定義され、「方法 : ホスト アプリケーションを構築する」で作成されたアプリケーションによってホストされるリモート型のクライアントを構築するには、アプリケーションがリモート オブジェクトのクライアントとして自身を登録し、それをクライアントのアプリケーション ドメイン内にある場合と同様に呼び出す必要があります。.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 リモート処理アプリケーションの構築
Copyright © 2007 by Microsoft Corporation.All rights reserved.