Techracho

UAC有効だと、HttpListenerExceptionが発生する

このエントリーをはてなブックマーク Share
2009.12.26    C#, ネットワーク, 馬場      baba   

C#でHTTPサーバを作るのはすごく簡単、

HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://*:8000/"); //ポート番号は好みで。80でもOK
listener.Start();

while (true)
{
	HttpListenerResponse response = listener.GetContext().Response;
	response.OutputStream.Write(data, 0, (int)data.Length); //ここで何かdataを出力する
	response.Close();
}

のようなコードだけで出来てしまいます。

しかし、これだとWindows Vista / 7 のUAC有効環境で、HttpListenerExceptionが発生します。
Windowsファイアウォールを無効にしても結果は変わりません。

UAC有効の状態では、通常権限のプログラムは、localhost以外からの接続を受け付けられないようです。

そもそもテストやミニプログラム以外でHttpListenerを使うか疑問が大きいので、手抜きで安直な解決方法を探ってみます。

localhostに限定
ローカルでテストする分には、
listener.Prefixes.Add(”http://localhost:8000″);
のようにすればとりあえず動きます。

管理者権限にする
localhost以外からも接続させたいなら、管理者権限で動かしてしまうのが簡単です。
Visual Studioを起動する際に管理者権限にしておけば、デバッグで起動するプログラムも管理者権限になるので、例外は発生しなくなります。

COPYRIGHT [C] 2009 BEYOND PERSPECTIVE SOLUTIONS LTD. ALL RIGHTS RESERVED.