自托管OWIN和urlacl

kay*_*one 23 acl self-hosting nancy signalr owin

我已经创建了一个自托管的Nancy/SignalR应用程序,它使用Microsoft.Owin.Host.HttpListener和在OWIN中自托管Microsoft.Owin.Hosting

事情在本地工作得很好但是一旦我尝试使用除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
        };
Run Code Online (Sandbox Code Playgroud)

这是启动和停止服务器的文件的源代码 https://github.com/NzbDrone/NzbDrone/blob/vnext/NzbDrone/Owin/OwinHostController.cs

kay*_*one 26

所以事实证明你需要以StartOptions与urlacl相同的格式传入一个url .

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

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

  • 最后,在Server 2012和Windows 8.1上对我有用的是使用http:// +:9000(没有设置urlacls)并打开端口(在我的情况下在域上). (3认同)

Mil*_*vec 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);
Run Code Online (Sandbox Code Playgroud)

我听不懂或得到503错误......

如果要监听多个IP地址,每个地址都需要自己的urlacl记录:

不起作用:

    netsh http>add urlacl http://+:9000/ user=EveryOne    
Run Code Online (Sandbox Code Playgroud)

好:

    netsh http>add urlacl http://localhost:9000/ user=EveryOne
    netsh http>add urlacl http://127.0.0.1:9000/ user=EveryOne
    etc.
Run Code Online (Sandbox Code Playgroud)

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


BCA*_*BCA 9

感谢@ kay.one提供的信息,我可以通过IP地址从同一台机器访问我自己托管的Web API 2.2(OWIN/Katana,控制台应用程序).然而,只需将其简化为一个简单的步骤:

  1. MainProgram.cs中(对于控制台应用程序):WebApp.Start<Startup>("http://*:8080");
  2. 从Windows命令提示符(以管理员身份运行)输入 netsh http add urlacl http://*:8080/ user=EVERYONE
  3. 转到具有高级安全性的Windows防火墙并添加打开TCP端口8080的入站规则

然后,您应该能够使用IP地址或计算机名从另一台计算机访问.

免责声明:我不是安全专家,因此我不知道这样做的安全隐患.