リモートオブジェクトをIISでホストする

はじめに

今更だが、.NET Remoting のリモートオブジェクトを IIS でホストする方法を調べたので、忘れないようにメモしておく。

リモートオブジェクトを作成する

System.MarshalByRefObject から派生させる。

public class SampleObject : MarshalByRefObject
{
    public string Greeting(string name)
    {
        return string.Format("Hello, {0}!", name); 
    }
}

Web.config を記述する

リモートオブジェクトを IIS でホストするには、Web.config が必要。
Web.config にはリモートオブジェクトの情報を記述する。

<?xml version="1.0?>
<configuration>
    <system.runtime.remoting>
        <application>
            <service>
                <wellknown mode="SingleCall"
                           type="RemotingSample.SampleObject, RemotingSample"
                           objectUri="SampleObject.soap"/>
            </service>
        </application>
    </system.runtime.remoting>
</configuration>

リモートオブジェクトを配置する

  1. C:\inetpub\wwwroot 内に、フォルダを新規作成。フォルダ名前は仮に Sample としておく。
  2. Sample フォルダ内に Web.config を配置。
  3. Sample フォルダ内に、bin フォルダを作成。
  4. bin フォルダ内に、リモートオブジェクトのアセンブリを配置。
  5. Sample フォルダのアクセス許可を変更し、Everyone で読み取り可能にする。

IIS でホストする

  1. [コントロールパネル]-[管理ツール]-[インターネットインフォメーションサービス(IIS)マネージャ]を起動。
  2. [サイト]-[Default Web Site] 下に Sample フォルダが表示されているので、右クリックして[アプリケーションへの変換]を実行。

この例では、リモートオブジェクトの URI は次のようになる。

http://localhost/Sample/SampleObject.soap

ちゃんとホストされているか確認するには、ブラウザを起動して次の URI を表示する。

http://localhost/Sample/SampleObject.soap?wsdl

XML が表示されたら OK。

クライアントからIISでホストしたリモートオブジェクトに接続する

クライアントからは、セルフホストしたときと同じ方法で、リモートオブジェクトに接続できる。使うチャネルは当然 HttpChannel。

// チャネルを登録
HttpChannel channel = new HttpChannel();
ChannelServices.RegisterChannel(channel, true);

// リモートオブジェクトの URL を作成
string uri = "http://localhost/Sample/SampleObject.soap";

// リモートオブジェクト呼び出し
SampleObject proxy = (SampleObject)Activator.GetObject(typeof(SampleObject), uri);
string result = proxy.Greeting("Alice");