none
HttpListenerの競合を防ぐには RRS feed

  • 質問

  • System.Net.HttpListenerクラスを使った簡易ローカルサーバープログラムを作っているのですが、しばしばlistener.Start()実行時において、「コンピュータ上の既存の登録と競合するため、プレフィックス '(URL)' での受け付けに失敗しました。」というエラーメッセージを保有するHttpListenerExceptionが発生し、クライアント要求の取得に失敗してしまいます。

    この問題の予防策、もしくは既存の登録を消去する方法はありませんでしょうか。
    2008年12月1日 9:16

回答

  • Tank2005 さん、

    こんにちは!
    フォーラム オペレーターの服部 清次です。

    Tank2005 さんがこちらの質問を投稿されてからかなり時間が経ってしまいましたが、その後、状況はいかがでしょうか?
    ちょっと気になりましたので、遅ればせながら、私の方で国内外の情報を探ってみましたところ、海の向こうの Q&A サイトに参考になりそうな情報が見つかりました。
    http://stackoverflow.com/questions/443640/httplistener-start-accessdenied-error-on-vista

    こちらのスレッドでは、質問者の方 (smvlad さん) が Tank2005 さんと同じエラー メッセージに遭遇されているのですが、その原因は、「ネットワーク カードに2つの IP アドレスが構成されていること」 となっています。
    もし、Tank2005 さんの環境でも2つの IP アドレスが構成されているようでしたら、上記のスレッドで紹介されている、smvlad さんが見つけられた解決策が役に立つかもしれませんので、参考までに和訳して紹介させていただきますね。 (^^)
    設定が違うとなると、当てはまる確率は低いのですが・・・

    ↓↓↓↓ ここから ↓↓↓↓

    理由は分かりませんが、私のネットワーク カードに2つの IP アドレスが構成されていることが原因のようです。
    (上記の私の質問のように) コードの中で1つの IP アドレスを指定した場合、
    listener.Prefixes.Add("http://myip1:8080/app/");
    例外を避けるためには、IP アドレスがバインドされた WeakWildcard と併せて登録する必要があります。
    netsh http add urlacl url=http://myip1:8080/app user=domain\user

    しかし、StrongWildcard (+ マーク) と併せてプレフィックスを追加し、
    listener.Prefixes.Add("http://+:8080/app/");
    同じワイルド カードで登録すると、
    netsh http add urlacl url=http://+:8080/app user=domain\user

    これにより、エラーは発生せず、両方の IP アドレスからアプリケーションにアクセスすることができます。

    ↑↑↑↑ ここまで ↑↑↑↑

    こちらの情報が参考になることを願っています。
    なお、StrongWildcard と WeakWildcard に関しましては、こちらで説明されていますので、併せてご確認ください。
    それでは、また! (^_^)/


    _____________________________________________
    マイクロソフト株式会社 フォーラム オペレーター 服部 清次

    • 回答としてマーク sk7474 2009年5月29日 8:08
    2009年4月27日 0:49

すべての返信

  • Tank2005 さん、

    こんにちは!
    フォーラム オペレーターの服部 清次です。

    Tank2005 さんがこちらの質問を投稿されてからかなり時間が経ってしまいましたが、その後、状況はいかがでしょうか?
    ちょっと気になりましたので、遅ればせながら、私の方で国内外の情報を探ってみましたところ、海の向こうの Q&A サイトに参考になりそうな情報が見つかりました。
    http://stackoverflow.com/questions/443640/httplistener-start-accessdenied-error-on-vista

    こちらのスレッドでは、質問者の方 (smvlad さん) が Tank2005 さんと同じエラー メッセージに遭遇されているのですが、その原因は、「ネットワーク カードに2つの IP アドレスが構成されていること」 となっています。
    もし、Tank2005 さんの環境でも2つの IP アドレスが構成されているようでしたら、上記のスレッドで紹介されている、smvlad さんが見つけられた解決策が役に立つかもしれませんので、参考までに和訳して紹介させていただきますね。 (^^)
    設定が違うとなると、当てはまる確率は低いのですが・・・

    ↓↓↓↓ ここから ↓↓↓↓

    理由は分かりませんが、私のネットワーク カードに2つの IP アドレスが構成されていることが原因のようです。
    (上記の私の質問のように) コードの中で1つの IP アドレスを指定した場合、
    listener.Prefixes.Add("http://myip1:8080/app/");
    例外を避けるためには、IP アドレスがバインドされた WeakWildcard と併せて登録する必要があります。
    netsh http add urlacl url=http://myip1:8080/app user=domain\user

    しかし、StrongWildcard (+ マーク) と併せてプレフィックスを追加し、
    listener.Prefixes.Add("http://+:8080/app/");
    同じワイルド カードで登録すると、
    netsh http add urlacl url=http://+:8080/app user=domain\user

    これにより、エラーは発生せず、両方の IP アドレスからアプリケーションにアクセスすることができます。

    ↑↑↑↑ ここまで ↑↑↑↑

    こちらの情報が参考になることを願っています。
    なお、StrongWildcard と WeakWildcard に関しましては、こちらで説明されていますので、併せてご確認ください。
    それでは、また! (^_^)/


    _____________________________________________
    マイクロソフト株式会社 フォーラム オペレーター 服部 清次

    • 回答としてマーク sk7474 2009年5月29日 8:08
    2009年4月27日 0:49
  • Tank2005さん、こんにちは。中川俊輔です。

    だいぶ時間が経ってしまったスレッドですが、同じ問題で困っている方が情報を見つけやすいように、
    まことに勝手ながら弊社服部の回答へ回答マークをつけさせていただきました。

    これからもフォーラムをよろしくお願いします。
    それでは!
    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年5月29日 8:11