次の方法で共有


方法 : クライアント アプリケーションを構築する

方法 : リモート処理が可能な型を構築する」で定義され、「方法 : ホスト アプリケーションを構築する」で作成されたアプリケーションによってホストされるリモート型のクライアントを構築するには、アプリケーションがリモート オブジェクトのクライアントとして自身を登録し、それをクライアントのアプリケーション ドメイン内にある場合と同様に呼び出す必要があります。.NET リモート処理システムは、クライアント呼び出しを受け取ってリモート オブジェクトに転送し、結果をクライアントに返します。次の手順では、基本のリモート処理クライアントを構築する方法について説明します。

Noteメモ :

このサンプルをビルドして実行する方法の詳細については、「方法 : 基本的なリモート処理アプリケーションをコンパイルして実行する」を参照してください。

基本のリモート処理クライアントを構築するには

  1. 方法 : ホスト アプリケーションを構築する」の手順に続いて、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 をリモート コンピュータの名前に置き換える必要があります。

    Noteメモ :

    前の構成ファイルにはわずかな設定しかありませんでしたが、.NET リモート処理を使用する場合の問題の多くは、これらの設定の一部が正しくないか、クライアント アプリケーションの構成設定に一致していないことが原因で発生します。よくある誤りには、名前の誤入力、ポートの未指定、属性の指定漏れなどがあります。リモート処理アプリケーションに問題がある場合は、まず構成設定を確認してください。

  2. 選択した言語で新しいソース ファイルを作成します。main メソッドでは、クライアント構成ファイル (client.exe.config) の名前を渡して RemotingConfiguration.Configure を呼び出します。次に、RemotableType のインスタンスを生成して、SayHello メソッドを呼び出します。クライアント アプリケーションを Client.cs または Client.vb として remoting\client ディレクトリに保存します。

    Noteメモ :

    クライアント アプリケーションは、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());
       }
    
  3. RemotableType.dll アセンブリを remoting\Type から remoting\client にコピーします。

    Noteメモ :

    ここで "クライアントにアセンブリをコピーする場合に、リモート オブジェクトが呼び出されたことがどのようにしてわかるのか" という疑問が生じます。これがまさに RemotableType.SayHello() メソッド内に Console.WriteLine への呼び出しを追加した理由です。リモート オブジェクトが呼び出されると、Listener プロセスの WriteLine が実行され、呼び出されない場合はクライアント プロセスの WriteLine が実行されます。

  4. remoting\client ディレクトリで次のコマンドを入力して、クライアント アプリケーションをコンパイルします。

    vbc /r:RemotableType.dll Client.vb
    csc /noconfig /r:RemotableType.dll Client.cs
    
  5. 2 つのコマンド プロンプトが開きます。一方では、remoting\listener ディレクトリに移動し、listener.exe を実行します。もう一方では、remoting\client ディレクトリに移動し、client.exe を実行します。クライアント側のコマンド プロンプトは、次のようになります。

    C:\tmp\Remoting\client>client 
    Hello, world 
    
  6. リスナ側のコマンド プロンプトは、次のようになります。

    C:\tmp\Remoting\listener>listener
    Listening for requests. Press Enter to exit...
    RemotableType.SayHello() was called!
    
  7. リスナの出力結果によって、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 リモート処理アプリケーションの構築

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.