以普通用户身份运行此代码会抛出HttpListenerException(拒绝访问)。 Snippet作为管理员运行正常
class Program
{
static void Main(string[] args)
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://myip:8080/app/");
listener.Start();
//.... and so on
}
}
我继续使用netsh添加了uri(netsh http show列出了uri)
netsh http add urlacl url=http://+:8080/app user=domain\user
仍然得到同样的错误。添加ACL确实适用于其他项目(尽管他们没有使用HttpListener)。我尝试了多个端口/应用程序名称组合,没有任何作用。
任何想法可能是什么原因?
在Vista上运行.Net 3.5 SP1
答案 0 :(得分:15)
我不明白为什么,但在这里。似乎原因是我的网卡配置了2个IP。
如果在代码中我指定了一个ips(就像我上面提到的那样)
listener.Prefixes.Add("http://myip1:8080/app/");
然后为了避免异常我需要用IP绑定的弱通配符注册它
netsh http add urlacl url=http://myip1:8080/app user=domain\user
但是如果我用强通配符(加号)添加前缀
listener.Prefixes.Add("http://+:8080/app/");
并使用相同的外卡注册
netsh http add urlacl url=http://+:8080/app user=domain\user
然后没有错误,我可以从两个IP访问我的应用程序。
答案 1 :(得分:0)
该URI是否已在系统上注册?
http://msdn.microsoft.com/en-us/library/system.net.httplistenerexception.aspx说这是一个原因。