Я хочу реализовать простой самообслуживаемый REST API в моем приложении WPF, который прослушивает конкретный порт на localhost. Этот API будет использоваться веб-сайтом для связи с приложением WPF, если он запущен.Самостоятельный REST API на localhost без административных привилегий
Не прошло много времени, прежде чем я столкнулся с ошибкой System.ServiceModel.AddressAccessDeniedException. URL-адрес должен быть зарезервирован, и это можно сделать только в том случае, если процесс выполняется с повышенными привилегиями. Проблема заключается в том, что это приложение используется тысячами компаний с различными политиками ИТ, что делает практически невозможным для приложения требовать административные привилегии при каждом запуске.
Это мой тестовый код:
_task = Task.Factory.StartNew(() =>
{
var uri = new Uri("http://localhost:5000/test");
var type = typeof (TestService);
WebServiceHost host = new WebServiceHost(type, uri);
WebHttpBinding binding = new WebHttpBinding();
binding.CrossDomainScriptAccessEnabled = true;
host.AddServiceEndpoint(type, binding, uri);
host.Open();
});
Есть ли способы обойти это? Какие-либо сторонние пакеты, которые я могу использовать? Или я могу зарезервировать URL-адрес во время установки приложения, так как для установки требуются повышенные привилегии? Или это тупик?
Я обновил свое сообщение с помощью примера кода. Я привязываюсь к localhost: 5000/test. Спасибо за отзыв о NancyFX. Я посмотрю на это! – sundown
Ах, вы можете _think_ вы привязываетесь к localhost. Дважды проверьте, что WCF не интерпретирует это как «все локальные адреса». Нэнси делает (или делает, когда я в последний раз ее использовал). –
Итак, я попробовал Нэнси, и это сработало отлично! Было немного сложнее заставить его играть красиво с моим существующим контейнером Castle Windsor, но я решил это. Еще раз спасибо за ваш ответ! И всем остальным, я уверен, что здесь есть больше ответов, которые бы сработали. Но я решил отметить это как ответ. – sundown