HttpListener.Start() Ошибка AccessDenied в Vista

Запуск этого кода в качестве обычного пользователя вызывает исключение 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
     }
}

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

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

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

Какие идеи могут быть причиной?

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

Ответы

Ответ 1

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