はじめに
数年前のことですが、CD-ROMに数万件のデータと検索システムを一緒に焼いて全国の営業所に配布したい、という話がありました。検索システムはインストールすることなくCD-ROM上から利用できることが条件で、検索自体はあまり複雑ではありませんでした。この話を聞いたとき、「CD-ROMからWebアプリケーションが実行できればシステムを作るのは簡単なのに……」と考えたものです。結局その話は丁重にお断りしてしまったのですが、今なら即座に引き受けることができます。
なぜなら、私の手元にCassiniがあるからです。
対象読者
.NET Frameworkを用いてWebアプリケーションを開発している方。
必要な環境
.NET FrameworkをインストールしたWindowsマシン
サンプルをCD-ROM上から実行する
サンプルの「Cassini_Sample」フォルダの内容をそのままCD-ROMに焼いてください。CD-ROMを挿入すると自動的にコマンドプロンプトが表示され、Webサーバが起動します。画面の指示どおりに[Enter]キーを入力すると、Webアプリケーション(1から100までの間のひとつの数字を当てるゲーム)が起動します。なお、コマンドプロンプトで再度[Enter]キーを押すと、Webサーバが終了します。
このWebアプリケーションは、「Web.Config」の設定やSession
オブジェクトを利用して実装しています。Cassiniを利用することでASP.NETアプリケーションが実際に動作することを確認できます。
Cassiniとは
Cassiniは、.NET Framework上で実装された簡易Webサーバのサンプルです。Cassiniを利用することで、IISがない環境でもASP.NETアプリケーションを実行することができます。実際、無償のASP.NET開発ツールであるWeb Matrixでは内部的にCassiniが使われています。Cassiniを利用するに当たっては、ASP.NET サンプル ソース ライセンシング プログラムを読んで使用条件を確認してください。
Cassiniを実行する
Cassiniを入手するには、こちらの「Download ASP.NET Cassini Sample Web Serve」というページからリンクをたどって「Cassini.exe」をダウンロードします。
この「Cassini.exe」を実行すると、デフォルトでは「C:\Cassini」フォルダにソースファイルや実行ファイルが展開されます。「ReadMe.txt」では「build.bat」を実行して、ソースの再コンパイルと「Cassini.dll」ファイルをグローバルアセンブリキャッシュに登録することが必要なように記述されていますが、必ずしもこの作業は必要ではありません。ここでは展開されたファイルをそのまま利用します。
まず、Webアプリケーションのルートとなるフォルダを用意しましょう。サンプルソースに含まれている「Web」フォルダ以下を、Cドライブの直下にコピーします。この「Web」フォルダがWebアプリケーションのルートとなります。「Web」フォルダの下に「bin」フォルダがあり、そこに「Cassini.dll」が存在していることを確認してください。
準備ができたら、「C:\Cassini」フォルダの「CassiniWebServer.exe」を実行します。[Application Directory]に「C:\Web」、[Server Port]に「8080」、[Virtual Root]に「/」を入力し、[Start]ボタンを押してください。Cassini Webサーバを起動すると、一番下にリンクボタンが表示されます。
リンクボタンをクリックすると、Webアプリケーションが起動します。Cassiniを終了するには、「CassiniWebServer.exe」で[Stop]ボタンを押してください。
ここではサンプルで作成したWebアプリケーションを実行していますが、VisualStudio.NETで作成した別のWebアプリケーションを実行することも可能です。「bin」フォルダに「Cassini.dll」をコピーして、起動時にWebアプリケーションのルートフォルダを指定すればCassiniがVisualStudio.NETで作成したWebアプリケーションを実行してくれるので試してみてください。
Cassiniを起動するプログラムの作成
「CassiniWebServer.exe」からWebアプリケーションを実行する場合、[Application Directory]に絶対パスを入力する必要があります。CD-ROMなどから実行する場合、使う人がCD-ROMのドライブ名やフォルダを指定しないといけないというのは不便です。そこでサンプルでは、自分と同じ場所にある「Web」フォルダをルートフォルダとして起動するプログラムを作成しています。
using System; using System.Diagnostics; using System.IO; using Cassini; using System.Threading; public class ProcessTest { // WebサーバのデフォルトのPort static int port = 8080; // Webアプリケーションのデフォルトで起動するファイル static string firstPage = "default.aspx"; public static void Main(string[] args) { // 起動したフォルダにあるWebフォルダをルートフォルダに指定する string physicalPath = Path.Combine(Environment.CurrentDirectory, "Web"); string virtualPath = "/"; Server myWebServer; // 引数としてPort番号を渡された場合は // そのPortでWebサーバを起動する if(args.Length>0) { bool isNumeric = true; for(int i=0;i<args[0].Length && isNumeric;i++) { isNumeric = Char.IsDigit(args[0], i); } if(isNumeric) port = int.Parse(args[0]); else { Console.WriteLine("Port番号を正しく指定してください"); Console .Write("終了するにはEnterキーを入力してください"); Console.ReadLine(); return; } } try { // Cassiniを起動する myWebServer = new Server(port, virtualPath, physicalPath); myWebServer.Start(); } catch { Console.WriteLine("簡易Webサーバが起動できませんでした"); Console.Write("終了するにはEnterキーを入力してください"); Console.ReadLine(); return; } Console.WriteLine("簡易Webサーバを起動しました"); Console.Write( "Enterキーを入力するとアプリケーションを開始します"); Console.ReadLine(); // Webアプリケーションを起動する Thread myThread = new Thread(new ThreadStart(newThreadRun)); myThread.Start(); Console.WriteLine("\r\nアプリケーションを開始しました"); Console.Write( "簡易Webサーバを終了するにはEnterキーを入力してください"); Console.ReadLine(); myWebServer.Stop(); } // スレッドを分けないとProcess.Startが // URLを正しく解釈してくれなかったため、別スレッドから実行している static private void newThreadRun() { string startupPage = String.Format("http://localhost:{0}/{1}", port, firstPage); Process.Start(startupPage); } }
「CassiniStarter.cs」をコンパイルするには「Cassini.dll」を参照する必要があります。また、実行時に「CassiniStater.exe」と「Cassini.dll」は同じフォルダになければいけません。「Cassini.dll」はWebアプリケーションの「bin」フォルダにもないといけないので、2つの「Cassini.dll」を利用することになります。
CD-ROMからの自動起動
CD-ROMから自動起動させるために「Autorun.inf」を作成しています。ここでは「CassiniStarter.exe」を実行するよう指定しているだけです。
まとめ
Cassiniは、9つのソースファイルで合計約2千行のそれほど大きなアプリケーションではありませんから、ソースコードをひととおり読んでみるのも面白いと思います。デフォルトでは、Cassini Webサーバには起動したマシンからしかアクセスできませんが、その制限を解除する方法は公開されています。ただし、IISのようにいくつものWebアプリケーションを同時に稼動することはできませんし、セキュリティ面でも問題があります。
こういった点を理解して使い方を吟味すれば、Cassiniを利用することでWebアプリケーションの活躍する場が広がるでしょう。ここではCD-ROMから起動する方法をご紹介しましたが、USBメモリにWebアプリケーションを入れて持ち歩くといったことも可能です。
ぜひ自分なりの有効な活用方法を探してみてください。