webdevqa.jp.net

自己ホスト型OWINおよびurlacl

Microsoft.Owin.Host.HttpListenerMicrosoft.Owin.Hostingを使用してOWINでセルフホストされたセルフホストのNancy/SignalRアプリケーションを作成しました

ローカルでは問題なく動作しますが、localhost以外のものを使用してアプリにアクセスしようとすると、HTTP Error 503. The service is unavailableエラーが発生します。 127.0.0.1またはマシン名を使用してアプリにアクセスすることもできません。

私は使用してurlaclにポートを追加しようとしました

http add urlacl http://*:8989/ user=EVERYONEは何もしないようです。

これが私が試したOWINスタートオプションです、

        var options = new StartOptions
        {
            Url = "127.0.0.1",
            App = GetType().AssemblyQualifiedName,
            Port = _configFileProvider.Port
        };

    var options = new StartOptions
        {
            App = GetType().AssemblyQualifiedName,
            Port = _configFileProvider.Port
        };

サーバーを起動および停止するファイルのソースコードを次に示します https://github.com/NzbDrone/NzbDrone/blob/vnext/NzbDrone/Owin/OwinHostController.cs

24
kay.one

したがって、URLをurlaclと同じ形式でStartOptionsに渡す必要があることがわかります。

起動オプションを以下のコードに変更すると、問題が修正されました。これで、ネットワークを介してアプリにアクセスできるようになりました。

  var options = new StartOptions("http://*:8989")
  {
      ServerFactory = "Microsoft.Owin.Host.HttpListener"
  };
26
kay.one

私はWindows 8.1で同様の問題を解決するのに何時間も費やしています。

    StartOptions options = new StartOptions();

    options.Urls.Add("http://localhost:9000");
    options.Urls.Add("http://127.0.0.1:9000");
    options.Urls.Add("http://192.168.0.102:9000");
    options.Urls.Add(string.Format("http://{0}:9000", Environment.MachineName));

    WebApp.Start<Startup>(options);

聞き取れなかったか、503エラーが発生しました...

複数のIPアドレスをリッスンする場合は、各アドレスに独自のurlaclレコードが必要です。

動作しません:

    netsh http>add urlacl http://+:9000/ user=EveryOne    

OK:

    netsh http>add urlacl http://localhost:9000/ user=EveryOne
    netsh http>add urlacl http://127.0.0.1:9000/ user=EveryOne
    etc.

各アドレスの予約を個別に追加した後、すべてが正常に動作します。

11
Milan Švec

@ kay.oneが提供した情報のおかげで、IPアドレスを介して同じマシンからセルフホストのWeb API 2.2(OWIN/Katana、コンソールアプリ)にアクセスできました。ただし、それを単純なステップバイステップに統合するだけです。

  1. Program.csのMain(コンソールアプリ用):WebApp.Start<Startup>("http://*:8080");
  2. Windowsコマンドプロンプト(管理者として実行)からnetsh http add urlacl http://*:8080/ user=EVERYONEを入力します
  3. セキュリティが強化されたWindowsファイアウォールに移動し、開くルールを追加しますTCPポート8080

これで、IPアドレスまたはコンピュータ名を使用して別のマシンからアクセスできるはずです。

免責事項:私はセキュリティの専門家ではないので、これを行うことのセキュリティへの影響はわかりません。

9
BCA