尝试使用HttpListener时为什么会出现"AccessDenied"?

Fra*_*ger 6 .net sockets web-services

赢7和VS2010 B2.我正在尝试使用内置编写一个最小的Web服务器HttpListener.但是,我一直收到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);
    }
Run Code Online (Sandbox Code Playgroud)

如果我绑定到系统端口,我可以理解需要以管理员身份运行,但我不明白为什么我对9669的绑定应该需要特殊权限.

有任何想法吗?

Fra*_*ger 25

感谢这个问题:我可以在Vista上监听端口(使用HttpListener或其他.NET代码)而无需管理员权限吗?

我有一个答案.

netsh http add 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);
    }
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

11345 次

最近记录:

15 年,10 月 前