HttpListener独立应用程序适用于2008年,2012年失败

时间:2014-08-19 00:49:45

标签: c# http.sys

我有一个使用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未在此计算机上运行。没有端口冲突。每台机器都有一个全新的安装,只有这个应用程序。

即将脱掉头发。

1 个答案:

答案 0 :(得分:2)

显然有一些事情没有用netsh http add urlacl表明并使用硬和软通配符“+”和“*”。

我已经解决了这个问题,而且似乎正在发生的事情是:

  • 检查urlacl条目并与HTTP Host标头进行比较
  • +和*通配符似乎只适用于IP地址和名称 机器已知的
  • 即。 +和*通配符不会 为公共IP地址工作或者不知道的DNS名称 机

因此,如果您的计算机位于本地网络上并可通过Internet访问,则可能必须为将要使用的公共IP地址和公用DNS名称设置显式urlacl条目。

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