.NET TIPS 簡易Webサーバを実装するには?[2.0のみ、C#、VB]デジタルアドバンテージ 遠藤 孝信2008/01/17 |
|
|
.NET Framework 2.0のクラス・ライブラリには、HTTPリクエストに応答可能なHttpListenerクラス(System.Net名前空間)が用意されており、このクラスを使えば簡単にアプリケーションにWebサーバの機能を実装できる。
本稿では非常に簡易なWebサーバを作成して、HttpListenerクラスの基本的な利用方法を示す。
簡易Webサーバを実装したサンプル・プログラム
ここではまず、HttpListenerクラスを使って実装した簡易Webサーバのサンプル・プログラムのソース・コードを示す。
このサンプル・プログラムを使用するには、あらかじめc:\wwwrootディレクトリ配下にHTMLファイルを配置しておく必要がある。例えばindex.htmlを配置した場合には、「http://localhost/index.html」あるいは「http://<マシン名>/index.html」*としてブラウザからアクセスできる。
* 別のPCからアクセスする場合にはWindowsファイアウォールで80番ポートを開いておく必要がある。 |
| |
簡易Webサーバを実装したC#のサンプル・プログラム(webserver.cs) | |
| |
簡易Webサーバを実装したVBのサンプル・プログラム(webserver.vb) | |
HttpListenerクラスを使用してWebサーバを実装する場合の基本的な流れは次のようになる。
- HttpListenerクラスをインスタンス化する
- 応答するプレフィックスの登録する
- Startメソッドを呼び出して処理を開始する
- GetContextメソッドを呼び出してリクエストを待つ
- リクエストが来たら、そのURLに応じたファイルを出力する
2のプレフィックスとは、リクエストを受け入れるURLのパターンであり、すべてのリクエストを受け入れるには「http://*/」としておけばよい。ポート番号を80番以外にする場合には、「http://*:8080/」(8080番の場合)といった具合に指定する。
Startメソッドの呼び出し後、実際にリクエストを受け取るにはGetContextメソッドを呼び出す。上記のサンプル・プログラムでは無限ループを行っているが、GetContextメソッドはリクエストが来るまで(=ブラウザによりアクセスされるまで)待つので、見かけ上、プログラムはそこで停止することになる。
リクエストが来るとGetContextメソッドは、その内容をHttpListenerContextクラス(System.Net名前空間)のオブジェクトとして返す。このHttpListenerContextオブジェクトからは、ブラウザからのリクエストを表すHttpListenerRequestクラスと、ブラウザに返すレスポンスを表すHttpListenerResponseクラスのオブジェクトにアクセスできる(どちらもSystem.Net名前空間)。
そして、HttpListenerRequestオブジェクトのRawUrlプロパティからは、リクエストされたURLからドメイン名を除いた部分が取得できる(例えば「/images/title.gif」など)。サンプル・プログラムでは、この文字列内の「/」を「\」に置き換えて、レスポンスとして返すファイルのパス名を求めている。
レスポンスとしてブラウザに対して出力する内容は、いま求めたパス名のファイルの内容を、HttpListenerResponseオブジェクトのOutputStreamプロパティから得られるストリーム(System.IO名前空間のStreamオブジェクト)に書き込めばよい。
ちなみに、上記のサンプル・プログラムではループ内でリクエストを1つ1つ処理しているが、一般的なWebサーバではリクエストが到着したら別スレッドにその処理を振り分けることにより、多くのリクエストを並列に処理して応答性を高めていることが多い。
なお、HttpListenerクラスはWindows XP SP2あるいはWindows Server 2003でしか使用できない(筆者が試した限りではWindows Vistaでも使用可能)。現在の環境で使用できるかどうかは、HttpListenerクラスの静的プロパティであるIsSupportedプロパティでチェックできる。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:クラス・ライブラリ 処理対象:ネットワーク 使用ライブラリ:HttpListenerクラス(System.Net名前空間) 使用ライブラリ:HttpListenerContextクラス(System.Net名前空間) 使用ライブラリ:HttpListenerRequestクラス(System.Net名前空間) |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|