|
.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」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


