HttpListener.Start () AccessDenied ошибка в Vista - PullRequest
13 голосов
/ 14 января 2009

Запуск этого кода обычным пользователем вызывает исключение HttpListenerException (доступ запрещен). Сниппет работает нормально как администратор

class Program
{
    static void Main(string[] args)
    {
        HttpListener listener = new HttpListener();
        listener.Prefixes.Add("http://myip:8080/app/");
        listener.Start();
        //.... and so on
     }
}

я пошел дальше и добавил URI, используя netsh (netsh http show перечисляет uri)

netsh http add urlacl url=http://+:8080/app user=domain\user

все еще получает ту же ошибку. Добавление ACL работало для других проектов (хотя они не использовали HttpListener). Я пробовал несколько комбинаций имен портов / приложений, ничего не работает.

Есть идеи, что может быть причиной?

Запуск .Net 3.5 SP1 в Vista

Ответы [ 2 ]

15 голосов
/ 15 января 2009

Я не понимаю почему, но вот оно. Похоже, причина в том, что моя сетевая карта настроена на 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.

0 голосов
/ 14 января 2009

Это URI уже зарегистрирован в системе?

http://msdn.microsoft.com/en-us/library/system.net.httplistenerexception.aspx говорит, что это будет одной из причин.

...