Microsoft.Owin.Host.HttpListener
とMicrosoft.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
したがって、URLをurlaclと同じ形式でStartOptions
に渡す必要があることがわかります。
起動オプションを以下のコードに変更すると、問題が修正されました。これで、ネットワークを介してアプリにアクセスできるようになりました。
var options = new StartOptions("http://*:8989")
{
ServerFactory = "Microsoft.Owin.Host.HttpListener"
};
私は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.
各アドレスの予約を個別に追加した後、すべてが正常に動作します。
@ kay.oneが提供した情報のおかげで、IPアドレスを介して同じマシンからセルフホストのWeb API 2.2(OWIN/Katana、コンソールアプリ)にアクセスできました。ただし、それを単純なステップバイステップに統合するだけです。
Main
(コンソールアプリ用):WebApp.Start<Startup>("http://*:8080");
netsh http add urlacl http://*:8080/ user=EVERYONE
を入力しますこれで、IPアドレスまたはコンピュータ名を使用して別のマシンからアクセスできるはずです。
免責事項:私はセキュリティの専門家ではないので、これを行うことのセキュリティへの影響はわかりません。