9

Self Host WebApi 非常新,但它的易用性和可扩展性给我留下了深刻的印象。至少通过本教程。到目前为止,我所做的一切都适用于我的开发机器,无论我使用 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.)我可以从局域网上的其他机器成功ping和tracert到192.168.0.x

5.) 一位朋友建议我设置一个 TCPListener 并确保我可以远程登录到它以消除防火墙的可能性。如果这个逻辑是合理的,那么防火墙就不是问题

编辑:感谢您的帮助,这是我认为确认这不是防火墙问题的另一个数据点。我之前在一个相当迟钝的(至少对于像我这样的非认证人员)瞻博网络防火墙/路由器后面发布了这个连接。我已经在我的家庭网络上的另一台机器(没有 IIS)上重做了教程,但仍然无法将服务发布到我局域网中的其他计算机。有任何想法吗?

4

3 回答 3

3

好吧,这不是硬件防火墙,而是 Windows 防火墙!哎呀,我浪费了很多时间。一旦我关闭了 Windows 防火墙(代码无论如何都在 Intranet 中运行),一切正常。

任何人都知道一个解释防火墙和wireshark如何交互的好网站;或者我想这只是一个人的第一次测试。

于 2013-06-13T02:22:01.010 回答
0

我会尝试几件事:

首先,去掉 HostNameComparisonMode 行。这实际上可能会禁用来自其他机器的请求。

如果仍然无法正常工作,请尝试摆脱 URL ACL 并以管理员身份运行您的应用程序,看看是否有效。如果可行,您可以重新添加 URL ACL,而不必以管理员身份运行。您应该只需要以“+”作为主机名的那个。

于 2013-06-01T00:17:57.570 回答
0

当我尝试使用 OWIN 进行自我托管时,我遇到了同样的问题。对我有用的是-

  1. 以管理员身份运行 Visual Studio
  2. 删除我在调试此问题时添加的所有 netsh urlacl 端口注册
  3. 向我的 Windows 防火墙添加入站规则我按照此链接 https://docs.microsoft.com/en-us/dotnet/framework/wcf/samples/firewall-instructions上的说明 查看该部分 -启用端口范围提前

而已!我能够从网络上的其他计算机调用我的 api。

希望这可以帮助...

于 2017-09-08T14:57:29.533 回答