28

我创建了一个在 OWIN 中自托管的自托管 Nancy/SignalR 应用Microsoft.Owin.Host.HttpListener程序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
};

这是启动和停止服务器的文件的源代码

4

3 回答 3

28

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

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

  var options = new StartOptions("http://*:8989")
  {
      ServerFactory = "Microsoft.Owin.Host.HttpListener"
  };
于 2013-05-21T02:53:57.533 回答
12

我花了很多时间解决 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.

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

于 2014-08-12T13:21:17.387 回答
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 地址或计算机名称从另一台机器进行访问。

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

于 2016-06-07T15:28:37.060 回答