我正在创建一个简单的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
此功能发现的IP适用于以前安装VMware播放器的以太网适配器,无线适配器和两个VMware网络适配器。我已尝试通过机器名称和文字IP远程访问以太网适配器。
我在urlacl列表中添加了条目。
我已经在许多地方使用了netsh http add urlacl
命令,包括在此链接:Remote access to a Nancy Self Host
如果我执行netsh http show urlacl
,我会看到我正在使用的端口条目。
我尝试了不同的Nancy配置
如果我为UrlReservations.CreateAutomatically设置Nancy配置选项,我将获得安全提示,在允许之后,我在netsh http show urlacl
列表输出中看到所有本地IP的新条目,但它仍然不允许远程访问。我还尝试了RewriteLocalHost选项true和false。
我尝试使用http://+:3684
或http://*:3684
(从Uri()
获取解析异常)和http://0.0.0.0:3684
(从AddAllPrefixes()
获取异常)启动Nancy在HttpListener()
)内。
我将EXE添加到Windows防火墙 我已经创建了防火墙例外,如下所述:https://msdn.microsoft.com/en-us/library/ms733768.aspx
关联规则显示包含TCP和UDP的每列的Private,Public和“Any”。
我尝试在不同的环境中运行Nancy。我运行的代码包括:作为本地系统运行的Windows服务,Visual Studio 2013调试器中的控制台应用程序,以及控制台应用程序以管理员身份运行
我认为这是一个简单的安全设置,但我已经用Google搜索并搜索了各种各样的东西了几天。
我错过了什么?
答案 0 :(得分:2)
这个答案提供了我需要的线索。 https://stackoverflow.com/a/21364604/1139376
这是因为HttpListener构建于http.sys之上,它将侦听您代表程序指定的端口。
这不是我的EXE做的实际聆听。我需要做的就是将“传入”规则添加到“系统”程序的Windows防火墙集和我正在使用的特定TCP端口。这允许远程访问。
答案 1 :(得分:-1)
使用HostConfiguration
并让Nancy
自动为您保留网址。
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为新端口创建网络规则(如果它们尚不存在)。