Tech Racho エンジニアの「?」を「!」に。

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

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を起動する際に管理者権限にしておけば、デバッグで起動するプログラムも管理者権限になるので、例外は発生しなくなります。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。