为什么即使在设置了适当的 URL ACL 之后,我的 C# 网络服务器也会收到 404 消息?

问题描述

我有一个用 C# 中的 HttpListener 构建的 Web 服务器。它使用端口 80 上的特定路径来从另一个 C# 应用程序调用 GET 请求。它在我的开发机器和虚拟机之间工作。我在另一台计算机上设置它,然后我开始从服务器收到 404 响应。我运行以下命令来打开端口和路径:

netsh advfirewall firewall add rule name="Server HTTP" dir=in action=allow protocol=TCP localport=80

netsh http add urlacl url=http://+:80/svrpath/ user=%USERDOMAIN%%USERNAME% listen=yes

当我调用简单的 get 到此服务器时,我不明白为什么我总是收到 404 错误。如果我在我的开发机器上运行服务器,它工作正常并且 GET 返回预期的 json 字符串。我什至关闭了双方的防火墙,它继续给我 404 错误。我已经从 Web 浏览器运行 get 命令,结果相同。

我还尝试将“add urlacl”命令中的用户更改为“所有人”和“管理员”等值,但无济于事。

在 Google 上搜索并没有给我任何解决方案,我正在寻找任何知道可能导致此类问题的原因的人。所有有问题的机器都运行 Windows 10 build 1709 并连接到本地网络。我确定我在某处错过了一些愚蠢的东西,但我无法弄清楚它是什么。

解决方法

此时我所能得出的结论是另一个进程正在锁定端口,因此我的应用程序无法响应请求。重新启动并完全重新安装程序(包括重新运行所有 netsh 命令)解决了该问题,并且此后此问题没有再次发生。