はじめに
今更だが、.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>
リモートオブジェクトを配置する
- C:\inetpub\wwwroot 内に、フォルダを新規作成。フォルダ名前は仮に Sample としておく。
- Sample フォルダ内に Web.config を配置。
- Sample フォルダ内に、bin フォルダを作成。
- bin フォルダ内に、リモートオブジェクトのアセンブリを配置。
- Sample フォルダのアクセス許可を変更し、Everyone で読み取り可能にする。
IIS でホストする
- [コントロールパネル]-[管理ツール]-[インターネットインフォメーションサービス(IIS)マネージャ]を起動。
- [サイト]-[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");