【发布时间】:2013-05-27 20:57:04
【问题描述】:
Self Host WebApi 非常新,但它的易用性和可扩展性给我留下了深刻的印象。至少通过这个tutorial。到目前为止,我所做的一切都适用于我的开发机器,无论我使用的是 localhost、127.0.0.1 还是我的 LAN Ip (192.168.0.x),但我很困惑为什么我无法从任何其他计算机甚至其他计算机访问该服务在同一个子网中。
简而言之,在运行它的机器上完成教程后: 浏览到
localhost:3636/api/products/
导致预期的 xml 返回。 在 LAN 上的另一台机器上浏览到:
192.168.0.x:3636/api/products/
导致超时 对于那些可能知道这一切如何相互作用的人的数据点:
1.) 我的开发机器(192.168.0.x,服务器,主机无论你想怎么称呼它)上面都有 IIS;我太偏执了,以至于我通过管理 GUI 阻止了它
2.) 我已通过以下命令行执行保留 URL/端口:
>netsh http add urlacl url=http://+:3636/ user=DOMAIN\USER listen=yes delegate=yes
>netsh http add urlacl url=http://192.168.0.x:3636/ user=DOMAIN\USER listen=yes delegate=yes
2.b)我已经同时尝试了这两种方法,并尝试将用户更改为“每个人”都无济于事
3.) 我已尝试更改教程中的代码以设置
config.HostNameComparisonMode = HostNameComparisonMode.Exact //default is Strong Wildcard
4.) 我可以从 LAN 上的其他机器成功 ping 和跟踪到 192.168.0.x
5.) 一位朋友建议我设置一个 TCPListener 并确保我可以远程登录到它以消除防火墙的可能性。如果这个逻辑是合理的,那么防火墙就不是问题
编辑:感谢您的帮助,这是另一个数据点,我相信它可以确认这不是防火墙问题。我之前在一个相当迟钝的(至少对于像我这样的非认证人员)瞻博网络防火墙/路由器后面发布了这个连接。我已经在我的家庭网络上的另一台机器(没有 IIS)上重做了教程,但仍然无法将服务发布到我局域网中的其他计算机。有什么想法吗?
【问题讨论】:
-
您是否在 DOMAIN\USER 下运行服务?我通常发现将服务作为 NETWORK SERVICE 运行更容易,然后在 netsh 命令中输入 user="NT AUTHORITY\NETWORK SERVICE"
-
另外,我会仔细检查您的防火墙并确保 netstat -a 显示您的服务正在侦听。
-
感谢达雷尔的想法。我目前仍在我的用户下调试服务(如果这很重要,谁拥有管理员权限)。我运行 netstat -a (在我的开发/主机上,如果这就是你的意思的话)并看到以下条目(除其他外): Proto Local Address Foreign Address State TCP 0.0.0.0:3636 DOMAIN:0 LISTENING TCP [::]: 3636 域:0 监听 不太清楚该怎么做。我想我会尝试确认防火墙。
标签: asp.net-web-api self-hosting