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

我正在创建一个简单的Windows服务,它承载一个Nancy实例来提供其内部数据的视图。 在本地计算机上使用浏览器时,一切都按预期工作; 我看到它提供的观点。 但是,我找不到任何理由不能从远程浏览器(在同一网络上)访问。 从远程浏览器访问只会延迟一段时间; IE将最终显示“此页面无法显示”; iPad上的Safari会在一段时间内显示部分进度条并且不执行任何操作。

我使用所有本地IP绑定,而不仅仅是localhost。 我在此链接上使用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

此function发现的IP适用于以前安装VMware播放器的以太网适配器,无线适配器和两个VMware网络适配器。 我已尝试通过机器名称和文字IP远程访问以太网适配器。

我在urlacl列表中添加了条目。 我已经在很多地方使用了netsh http add urlacl命令,包括在这个链接: 远程访问Nancy Self Host

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

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

我尝试使用http://+:3684http://*:3684 (从Uri()获取解析exception)和http://0.0.0.0:3684 (从AddAllPrefixes()获取exception) AddAllPrefixes()HttpListener() )中。

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

关联规则显示具有TCP和UDP的每个列的Private,Public和“Any”。

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

我想这是一个简单的安全设置,但我已经用Google搜索并搜索了各种各样的东西了几天。

我错过了什么?

这个答案提供了我需要的线索。 https://stackoverflow.com/a/21364604/1139376

这是因为HttpListener构建在http.sys之上,它将侦听您代表程序指定的端口。

这不是我的EXE做的实际聆听。 我需要做的就是将“传入”规则添加到“系统”程序的Windows防火墙集和我正在使用的特定TCP端口。 这允许远程访问。

使用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为新端口创建网络规则(如果它们尚不存在)。