如何远程访问自托管的 Nancy 服务?

How do I remotely access self-hosted Nancy service?

我正在创建一个简单的 Windows 服务来托管 Nancy 实例以提供其内部数据的视图。在本地机器上使用浏览器时一切正常;我看到它提供的观点。但是,我找不到任何无法从远程浏览器(在同一网络上)访问的原因。从远程浏览器访问只会延迟一段时间; IE 最终会在 iPad 上显示 "This page can’t be displayed;" Safari 显示部分进度条一段时间,什么都不做。

我正在使用所有本地 IP 进行绑定,而不仅仅是本地主机。 我在此 link 处使用 GetUriParams() 函数来发现所有用于绑定的本地 IP 地址。 http://www.codeproject.com/Articles/694907/Embed-a-web-server-in-a-windows-service

_nancyHost = new NancyHost(GetUriParams(port));
_nancyHost.Start();

我在此页面上发现绑定到 localhost 仅适用于本地访问。 http://forums.asp.net/t/1881253.aspx?More+SelfHost+Documentation

此函数发现的 IP 用于以太网适配器、无线适配器和两个来自先前安装的 VMware 播放器的 VMware 网络适配器。我已经尝试通过机器名称和文字 IP 对以太网适配器进行远程访问。

我在 urlacl 列表中添加了条目。 我在很多地方都使用了推荐的 netsh http add urlacl 命令,包括这个 link: Remote access to a Nancy Self Host

如果我执行 netsh http show urlacl,我会看到我正在使用的端口条目。

我尝试了不同的 Nancy 配置 如果我为 UrlReservations.CreateAutomatically 设置 Nancy 配置选项,我会得到安全提示,允许后,我会在 netsh http show urlacl 列表输出中看到所有本地 IP 的新条目,但它仍然不允许远程使用权。我还尝试了 RewriteLocalHost 选项 true 和 false。

我尝试使用 http://+:3684http://*:3684(从 Uri() 获取解析异常)和 http://0.0.0.0:3684(从 [=19 获取异常)启动 Nancy =] HttpListener()).

我将 EXE 添加到 Windows 防火墙 我已经按照此处所述创建了防火墙例外:https://msdn.microsoft.com/en-us/library/ms733768.aspx

关联规则显示 Private、Public 和 "Any" 用于同时包含 TCP 和 UDP 的每一列。

我在不同的环境中尝试了 运行ning Nancy。 我已经 运行 代码在:Windows 服务 运行作为本地系统,Visual Studio 2013 调试器中的控制台应用程序,以及 运行 作为管理员的控制台应用程序。

我认为这是一个简单的安全设置,但我已经用谷歌搜索并尝试了几天的各种方法。

我错过了什么?

使用 HostConfiguration 并让 Nancy 自动为您进行 URL 预订。

var config = new HostConfiguration
{
    RewriteLocalhost = true,
    UrlReservations = new UrlReservations { CreateAutomatically = true }
};
host = new NancyHost(new Uri("http://localhost:8080"), new DefaultNancyBootstrapper(), config);
host.Start();

请注意,这将强制 ACL 为尚不存在的新端口创建网络规则。

这个答案提供了我需要的线索。

This is because HttpListener is built on top of http.sys which will listen on the port you specified on behalf of your program.

不是我的 EXE 在进行实际的监听。我需要做的就是为 "System" 程序和我正在使用的特定 TCP 端口设置的 Windows 防火墙添加传入规则。这允许远程访问。