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 в Vistap >
Ответы
Ответ 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.
Ответ 2
Является ли этот URI уже зарегистрированным в системе?
http://msdn.microsoft.com/en-us/library/system.net.httplistenerexception.aspx говорит, что это будет одной из причин.