为啥我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制]
Posted
技术标签:
【中文标题】为啥我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制]【英文标题】:Why do I get "AccessDenied" when trying to use HttpListener? [duplicate]为什么我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制] 【发布时间】:2010-12-31 13:25:28 【问题描述】:Win 7 和 VS2010 B2。我正在尝试使用内置的HttpListener
编写一个最小的 Web 服务器。但是,我不断收到 AccessDenied 异常。代码如下:
int Run(string[] args)
_server = new HttpListener();
_server.Prefixes.Add("http://*:9669/");
_server.Start();
Console.WriteLine("Server bound to: 0", _server.Prefixes.First());
_server.BeginGetContext(HandleContext, null);
如果我绑定到系统端口,我可以理解需要以管理员身份运行,但我不明白为什么绑定到 9669 需要特殊权限。
有什么想法吗?
【问题讨论】:
【参考方案1】:感谢这个 SO 问题:Can I listen on a port (using HttpListener or other .NET code) on Vista without requiring administrator priveleges?
我有一个答案。
netsh http 添加 urlacl url=http://*:9669/ user=fak listen=yes
疯了。这是我修改后的函数:
int Run(string[] args)
var prefix = "http://*:9669/";
var username = Environment.GetEnvironmentVariable("USERNAME");
var userdomain = Environment.GetEnvironmentVariable("USERDOMAIN");
_server = new HttpListener();
_server.Prefixes.Add(prefix);
try
_server.Start();
catch (HttpListenerException ex)
if (ex.ErrorCode == 5)
Console.WriteLine("You need to run the following command:");
Console.WriteLine(" netsh http add urlacl url=0 user=1\\2 listen=yes",
prefix, userdomain, username);
return -1;
else
throw;
Console.WriteLine("Server bound to: 0", _server.Prefixes.First());
_server.BeginGetContext(HandleContext, null);
【讨论】:
更多安全性供我们大家学习 看来您确实需要listen=yes
。没有它为我工作。另外,我使用了http://+:9669/
。以上是关于为啥我在尝试使用 HttpListener 时会收到“AccessDenied”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在尝试使用 reddit API 时会收到 405 错误?
为啥我在尝试将它与目标 c 一起使用时会收到错误消息,即我的 json 末尾有垃圾?
为啥我在尝试访问 spark master webUI 时会重置连接?
为啥我在尝试编辑离开语音频道的用户时会收到 DiscordAPIError?