HttpListener独立应用程序在2008年工作,在2012年失败

本文关键字:2012年 失败 工作 2008年 独立 应用程序 HttpListener | 更新日期: 2023-09-27 18:18:29

我有一个使用HttpListener的独立应用程序,它在Server 2008上工作得很好,但在2012上失败得很惨。每次我尝试连接时,我都会得到一些不同的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>

当我从该机器上的命令提示符连接到侦听器端口时,它工作正常(我得到了我期望的响应)。

防火墙配置正确,我甚至在防火墙被禁用的情况下尝试过。

我已经尝试了netsh http add urlacl的所有可能的组合,包括:

http://+:n/ (n = port number)
http://*:n/
http://127.0.0.1:n/
http://localhost:n/
http://public_ip_address:n/

我也试过在每个主机名上访问。

也有多种用户组合:

user=everyone
user=hostname'administrator

我单独尝试过,也尝试过没有配置它们。

结果是相同的,但是响应在503和400之间波动(与上面的响应体相同)。

IIS没有在这台机器上运行。没有端口冲突。每台机器都有一个全新的安装,只有这个应用程序。

要扯掉我头上的头发

HttpListener独立应用程序在2008年工作,在2012年失败

显然,netsh http add urlacl和使用硬通配符"+"answers"*"有一些事情没有弄清楚。

我已经解决了这个问题,现在的情况是:

  • urlacl条目被检查并与HTTP主机头
  • 进行比较
  • +和*通配符似乎只适用于IP地址和名称机器所知道的
  • 。+和*通配符将不工作的公共IP地址或DNS名称,不知道的机

因此,如果您有一台在本地网络上并且可以通过Internet访问的机器,您可能必须为将要使用的公共IP地址和公共DNS名称设置显式的url条目。

真的,真的很烦人。我希望这能节省一些时间。