自托管OWIN和urlacl

本文关键字:urlacl OWIN | 更新日期: 2023-09-27 18:14:25

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

下面是启动和停止服务器的文件的源代码。

自托管OWIN和urlacl

所以你需要将url以与url相同的格式传递到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地址,每个地址需要它自己的url记录:

不工作:

    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。前提是我能够通过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地址或计算机名从另一台机器访问。

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