方法 : ホスト アプリケーションを構築する

このトピックの対象は、既存のアプリケーションとの下位互換性のために残されているレガシ テクノロジに特定されています。新規の開発には、このトピックを適用しないでください。分散アプリケーションは、現在は Windows Communication Foundation (WCF) を使用して開発する必要があります。

方法: リモート処理が可能な型を構築する」トピックで定義した RemotableType クラスは、それ自体が特別なクラスではありません。他のアプリケーション ドメインのオブジェクトを有効にしてこのオブジェクトのインスタンスをリモートで作成するには、次の処理を実行するホスト アプリケーションまたはリスナー アプリケーションを構築する必要があります。

  • ネットワーク プロトコルとシリアル化形式を自動的に処理するオブジェクトであるチャネルを選択して登録する。

  • .NET リモート処理システムに型を登録し、.NET リモート処理システムがチャネルを使用して型に対する要求をリッスンできるようにする。

.NET Framework には、HttpChannel (既定で SOAP 形式を使用)、TcpChannel (既定でバイナリ形式を使用)、および IpcChannel (既定でバイナリ形式を使用) の 3 つの既定のチャネルが用意されています。HttpChannel は、ポートを開くことなくファイアウォール経由で使用でき、標準のセキュリティ プロトコルと認証プロトコルをサポートします。シナリオに適したチャネルの選択の詳細については、「チャネル」を参照してください。

リスナー アプリケーションは、Windows フォーム アプリケーション、ASP.NET Web アプリケーション、コンソール アプリケーション、Windows サービス (Windows NT サービスとも呼ばれます)、またはその他のマネージ アプリケーション ドメインなど、任意の種類のアプリケーション ドメインを使用して構築できます。リモート構成はアプリケーション ドメインごとに行われるため、要求をリッスンするにはアプリケーション ドメインが実行中でなければなりません。

ecc85927.note(ja-jp,VS.100).gif注 :
COM とは異なり、リモート処理は、ホスト アプリケーションまたはサーバー アプリケーションを自動的に開始しません。これは、.NET リモート処理と COM のリモート アクティベーションの重要な違いです。

プログラム、またはアプリケーションやコンピューターの構成ファイルを使用して、構成を行うことができます。

リモート処理システムは、このファイルの情報を使用してリモート要求をリッスンし、これをリモート処理可能な型のインスタンスにルーティングします。このファイルでは、サーバー アクティベーション モード、型名とリッスン対象の型のアセンブリ、オブジェクト URI (Uniform Resource Identifier) またはオブジェクトの外部名を指定します (オブジェクト URI とリモート処理の詳細については、「アクティベーション URL」を参照してください)。

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

構成ファイルを使用すると、実行可能ファイルを再コンパイルすることなくリモート処理構成を変更できます。.NET リモート処理インフラストラクチャの構成については、「リモート処理設定スキーマ」を参照してください。

ecc85927.note(ja-jp,VS.100).gif注 :
このサンプル コードをビルドして実行する方法の詳細な説明については、「方法 : 基本的なリモート処理アプリケーションをコンパイルして実行する」を参照してください。

構成ファイルを使用する簡単なホスト アプリケーション ドメインを実装するには

  1. 方法 : リモート処理が可能な型を構築する」の手順に続いて、remoting の下に別のディレクトリを作成し、host という名前を付けます。リモート クラスの構成ファイルを作成します。ホスト アプリケーションは、リモート クラスの構成ファイルを読み込むことができる必要があります。したがって、構成ファイルはホスト アプリケーションのアセンブリと同じディレクトリに保存する必要があります。そうしないと構成ファイルが見つからず、例外がスローされます。リモート オブジェクトが Singleton で、その実装が RemotableType という名前のアセンブリに格納されている RemotableType という名前のクラスであることを指定する構成ファイルを次のコードに示します。次に、ポート 8989 をリッスンする HttpChannel を登録します。このファイルを remoting\listener ディレクトリに保存します。ファイル名は、app-name.exe.config のパターンに従う必要があります。ここでは、listener.exe.config という名前です。

    <configuration>
       <system.runtime.remoting>
          <application>
             <service>
                <wellknown 
                   mode="Singleton" 
                   type="RemotableType, RemotableType" 
                   objectUri="RemotableType.rem"
                />
             </service>
             <channels>
                <channel ref="http" port="8989"/>
             </channels>
          </application>
       </system.runtime.remoting>
    </configuration>
    
  2. 選択した言語で新しいソース ファイルを作成します。ソース ファイルの先頭で System.Runtime.Remoting 名前空間をインポートします。

    Imports System
    Imports System.Runtime.Remoting
    
    using System;
    using System.Runtime.Remoting;
    
  3. Main メソッドでは、リモート クラスを構成する構成ファイル読み込み、ホストが実行中であることをユーザーに通知するメッセージを表示します。その後、キーが押されるまで待機します。このファイルを remoting\listener ディレクトリに保存します。

    Public Class Listener
        Public Shared Sub Main()
            RemotingConfiguration.Configure("Listener.exe.config", False)
            Console.WriteLine("Listening for requests. Press enter to exit...")
            Console.ReadLine()
        End Sub
    End Class
    
    public class Listener
    {
        public static void Main()
        {
            RemotingConfiguration.Configure("Listener.exe.config", false);
            Console.WriteLine("Listening for requests. Press enter to exit...");
            Console.ReadLine();
        }
    
    }
    
  4. 方法 : リモート処理が可能な型を構築する」で生成した RemotableType.dll を remoting\listener ディレクトリにコピーします。ホスト アプリケーションは、このアセンブリを参照する必要があります。次のコマンドを入力して、このクラスを実行可能ファイルにコンパイルします。

    vbc /r:RemotableType.dll Listener.vb
    
    csc /noconfig /r:RemotableType.dll Listener.cs
    
  5. これで Listener.exe というアセンブリが完成しました。このアセンブリを実行して、構成が成功するかどうかを確認してください。ファイアウォールで 8989 ポートを現在ブロックしている場合は、セキュリティ ダイアログが表示されることがあります。その場合は、[ブロック解除] ボタンをクリックして、ファイアウォールの 8989 ポートを一時的に開きます。

  6. リモート処理が可能な型の使用方法の詳細については、「方法 : クライアント アプリケーションを構築する」を参照してください。

' Listener.vb
Public Class Listener
    Public Shared Sub Main()
        RemotingConfiguration.Configure("Listener.exe.config", False)
        Console.WriteLine("Listening for requests. Press enter to exit...")
        Console.ReadLine()
    End Sub
End Class
// Listener.cs
using System;
using System.Runtime.Remoting;

public class Listener
{
    public static void Main(string[] args)
    {
        RemotingConfiguration.Configure("Listener.exe.config", false);
        Console.WriteLine("Listening for requests. Press enter to exit...");
        Console.ReadLine();
    }
}

参照

処理手順

方法 : ホスト アプリケーションを構築する

リファレンス

リモート処理設定スキーマ

概念

リモート アプリケーションの構成
サーバー アクティベーション

その他のリソース

基本的な .NET Framework リモート処理アプリケーションの構築

ビルド日:2010-02-13