ホーム > 開発 > C#で動的なハイポートで待ち受けるWebサーバを実装する

C#で動的なハイポートで待ち受けるWebサーバを実装する

ニーズが解りにくいかもしれませんが、LAN内で通信するアプリケーションを実装する時に、通信プロトコルとしてHTTPを選択するケースが該当します。
ランダムなハイポートにどうやって接続するんだと疑問に思うかもしれませんが、ポート番号はZeroconfなどでブロードキャストします。
利点としてはIANAにポート番号を登録したり、衝突覚悟で使う必要が無いという事をあげておきます。

C#でWebサーバを実装する場合、真っ先に思いつくのはSystem.Net.HttpListenerクラスだと思いますが、このクラスは以下の理由で今回の目的には使えません。

  • ポート番号に0を指定して、カーネルに動的なハイポートを割り当てさせる事ができない。未確認なので0を受け付ける可能性もあるが、少なくても割り当て後のポート番号を確認する方法が無い。
  • ファイアーウォールに除外設定を行う方法が無い。HttpListenerは通信をhttp.sysの中で行うため、プロセス名を指定して除外設定を行う事ができない。また、利用するポート番号はランダムなので、ポート番号を指定して除外する事もできない。

そこで、アプリケーションに埋め込み可能なHTTPサーバの実装を探してみたんですが、C# WebServerという物がありました。
すべてC#で書かれていて、Apacheライセンスです。
試したところ、ポート番号0を指定すると例外を投げます。また、リスン開始後のポート番号を確認する方法もありません。
そこで、パッチを作成しました。
ポート番号に0を指定するとランダムなハイポートを割り当てます。
また、割り当てたポート番号を読み出せるプロパティを追加しました。

パッチはプロジェクトにポストしました。
マージしてくれると、メンテが楽なんですが……。

広告
カテゴリー:開発 タグ:
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。