自托管OWIN和urlacl

时间:2013-05-20 04:32:27

标签: signalr acl nancy self-hosting owin

我使用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

3 个答案:

答案 0 :(得分:26)

所以事实证明你需要以与urlacl相同的格式将网址传递到StartOptions

将启动选项更改为以下代码可解决问题。现在,该应用程序可通过网络访问。

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

答案 1 :(得分:11)

我花了很多时间在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    

行:

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

单独为每个地址添加预订后,一切正常。

答案 2 :(得分:8)

感谢@ 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的入站规则
  4. 然后,您应该能够使用IP地址或计算机名从另一台计算机访问。

    免责声明:我不是安全专家,所以我不知道这样做的安全隐患。