HTTP не удалось зарегистрировать URL http: // +: 8000 / HelloWCF /. Ваш процесс не имеет прав доступа к этому пространству имен


184

Я новичок в WCF, но пытаюсь улучшить свой опыт. И на первом этапе я столкнулся с проблемой. Я создал простейшую службу WCF. Листинг кода: (весь код в одном файле)

using System;
using System.ServiceModel;

namespace EssentialWCF
{
    [ServiceContract]
    public interface IStockService
    {
        [OperationContract]
        double GetPrice(string ticker);
    }

    public class StockService : IStockService
    {
        public double GetPrice(string ticker)
        {
            return 94.85;
        }
    }

    class Service
    {
        static void Main(string[] args)
        {
            ServiceHost serviceHost = new ServiceHost(typeof(StockService),
                                                        new Uri("http://localhost:8000/HelloWCF"));

            serviceHost.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding());
            serviceHost.Open();

            Console.WriteLine("To continue press ENTER");

            serviceHost.Close();
        }
    }
}

Это будет сервис, который дает мне номер через консоль. Но отладка дала мне исключение: (вместо числа :))

HTTP не удалось зарегистрировать URL http: // +: 8000 / HelloWCF / . У вашего процесса нет прав доступа к этому пространству имен ( подробности см. На http://go.microsoft.com/fwlink/?LinkId=70353 ).

Вы когда-нибудь сталкивались с подобной ситуацией? Буду рад каждому совету.


Я в замешательстве. Этот экранированный HTML-текст должен быть частью кода?
Эми

1
поищите здесь другой вариант [ stackoverflow.com/questions/885744/…
shankbond

Ответы:


234

К сожалению, ссылка в тексте исключения http://go.microsoft.com/fwlink/?LinkId=70353 не работает. Однако раньше это приводило к http://msdn.microsoft.com/en-us/library/ms733768.aspx, где объясняется, как установить разрешения.

Он в основном сообщает вам использовать следующую команду:

netsh http add urlacl url=http://+:80/MyUri user=DOMAIN\user

Вы можете получить дополнительную помощь по деталям с помощью netsh

Например: netsh http add ?

Оказывает помощь по http addкоманде.


3
Этот метод также полезен для настройки необходимых разрешений на сервере автоматического тестирования.
Technobabble

8
Обязательно запускайте команду из командной строки администратора.
mbonness

3
Если вы не в домене, просто используйте COMPUTER_NAME\USER_NAMEв приведенной выше команде.
dotNET

вы можете запустить это, netsh http add urlacl url=http://+:80/ user=DOMAIN\userесли хотите предоставить учетной записи права доступа к любым пространствам имен на порту.
Хамид Гейдарян

это должно быть сделано на клиентской машине или на сервере, или на обоих? а что следует использовать в http: //? ip клиента или сервера? Как обычно помощь бесполезна
GuidoG

180

Я закрыл среду разработки Visual Studio и снова открыл ее, щелкнув правой кнопкой мыши значок Visual Studio и сказав «Запуск от имени администратора». Затем, когда я запустил хост, все заработало !!!


17
Во-первых, это плохая практика, хотя Visual Studio не оставляет здесь выбора. Во-вторых, проблема остается на других этапах (например, при развертывании). См. Ответ Брайана или blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Стефан Гуришон

3
Печаль во благо! Friggin MS, делая различный функционал, борющийся сам с собой. Вот вам и «минимум привилегий».
Дэн Чарпстер,

1
Лучшая практика или нет, это на MS. Почему WCF / .NET настолько особенный, что требуется еще одно кольцо, чтобы перепрыгнуть через него? Если я напишу сервис на Java, работающий в Windows, блин, он работает локально. Если я хочу сделать его общедоступным, я настраиваю брандмауэр, коммутатор, маршрутизатор и т. Д.
Кай Ван

1
-1. Это неправильный поступок. Вы должны предоставить явное разрешение ограниченному пользователю и использовать его. @ Ответ Брайана ниже лучше.
Дэниел Джеймс Брайарс

2
-1. Это то же самое, что переформатировать жесткий диск, когда есть проблема, и сказать, что проблема решена. Как уже указывалось, ответ
Стан Баштавенко

25

Щелкните правой кнопкой мыши Visual Studio> Запуск от имени администратора> Откройте свой проект и запустите службу. Это проблема, связанная с привилегиями.


Работал у меня. Благодарность!
Losbear 08

14

Вам нужны права администратора для вашей учетной записи, если ваш компьютер находится в локальной сети, тогда вы применяете некоторые права администратора к своему пользователю, иначе вы должны запустить ide как администратор ...


2
Это то, что мне нужно было сделать для моей службы Windows WCF. Я использовал новую учетную запись домена для запуска службы на машине сборки. Моя служба запустится, а затем выдаст это исключение. Как только я дал ему права администратора, он работал отлично.
thehelix

Это решило проблему для меня. Просто щелкните службу правой кнопкой мыши и на вкладке «
Вход

14

Вам нужно просто закрыть среду Visual Studio и снова открыть ее с помощью «Запуск от имени администратора». Теперь он должен работать успешно.


19
Запуск от имени администратора только избегает проблем, но не решает их.
ProfK

6

В Windows Vista и более поздних версиях служба HTTP WCF вызовет упомянутое вами исключение, поскольку ограниченная учетная запись не имеет на это права. Вот почему он работал, когда вы запускали его от имени администратора.

Каждый разумный разработчик должен использовать ОГРАНИЧЕННУЮ учетную запись, а не в качестве администратора, однако многие люди идут неправильным путем, и именно поэтому существует так много приложений, которые ТРЕБУЮТ разрешения администратора, когда они на самом деле не требуются. Ленивая работа приводит к ленивым решениям. Надеюсь, вы по-прежнему работаете в ограниченном аккаунте (мои поздравления).

Существует инструмент (с 2008 года или около того) под названием NamespaceManagerTool, если я правильно помню, который должен предоставлять ограниченные разрешения пользователя на эти URL-адреса служб, которые вы определяете для WCF. Но я этим не пользовался ...


Инструмент, о котором вы думаете, называется Http Namespace Manager. Он не поддерживается MS, но доступен здесь: blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Гарет,

1

Ваш пример кода не будет работать, как показано, потому что вы забыли поставить Console.ReadLine()перед serviceHost.Close()строкой. Это означает, что хост открывается, а затем сразу закрывается.

Кроме того, похоже, у вас есть проблема с разрешением на вашем компьютере. Убедитесь, что вы вошли в систему с учетной записью администратора на своем компьютере. Если вы являетесь администратором, возможно, у вас не запущена служба публикации в Интернете (W3SVC) для обработки HTTP-запросов.


Я уже исправил эту проблему, и это не из-за моей учетной записи cmd и (конечно) не из-за ReadLine () - потому что дело в исключении (а не в результате cmd).
valecoder

Я решил это с помощью stackoverflow.com/questions/885744/… .
valecoder 04

1

Хотя я смог решить эту проблему на одном компьютере, следуя решениям других пользователей, эта команда netshне решила проблему на одной из моих машин, и хотя у текущего пользователя были права администратора, я все еще получал сообщение «HTTP не удалось зарегистрировать URL. .... Ваш процесс не имеет прав доступа к этому пространству имен ". Итак, я делюсь своим решением на случай, если вы все еще не заставите его работать с другими решениями.

После того, как я попытался предоставить пользователю права на запись в физическом каталоге моего веб-сайта и не добился успеха, я наконец решил попробовать изменить настройки IIS .

Как показано на изображениях ниже, я настроил учетные данные физического пути своего веб-сайта для подключения в качестве конкретного пользователя, который был учетной записью администратора с DOMAIN \ username и паролем, и этого было достаточно, чтобы ошибка исчезла.

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь


0

Закройте iis express и все браузеры (если URL-адрес был открыт в любом из браузеров). Также откройте IDE Visual Studio в режиме администратора. Это решило мою проблему.


Это не решило проблему. Использование IDE в режиме администратора - еще одна проблема, возможно, более серьезная.
Preza8
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.