(C#)HttpListenerクラスを使用してWebSocket通信を行った場合の注意点

連日、猛暑がきついですね…8月はこれ以上暑くなるのかと思うとげんなりします。
とりあえず熱中症も怖いですし、日中はなるべく外に出ないようにするのと、
エアコンの効いた部屋にいるようにします。(ザ・引き籠り)


さて表題の件です。
C#でWebSocketプログラムを作成するにあたり、Web上で検索すると
HttpListenerクラスを使用した例がよく出てきます。

比較的作りも簡単で、少し試してみるには向いているのクラスなのですが、
本格的に使用する場合、1つ注意点があります。

端的に言うと、「サーバー側、つまり外部からの接続を受ける側の場合、
ファイアウォールの受信ポート許可設定とnetsh設定が必要」な点です。

少し試すためにlocalhostで実験する場合は何の問題も無いんですが、
例えば2台のPCをLANで繋いでWebSocket通信を行う場合、上記設定が必要になります。

具体例には、外部から「ws://[サーバー側のIPアドレス]:8080/test」で接続される場合
サーバー側のファイアウォール「受信の規則」にポート8080の許可が必要なんですね。
(ファイアウォールの設定方法は調べればいくらでも出てくるので割愛)

さらにこれだけでは終わらず、netshの設定も必要です。

1.コマンドプロンプトを管理者権限で起動
2.「netsh http add urlacl url=http://+:8080/ user=Everyone」を実行

どうしてこのような設定が必要なのかという話ですが、
どうもHttpListenerクラスは内部的にIISというか、HTTP.SYSが使用されているため
らしいです。なんとも厄介な。

以上