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


179

Я початківець у 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

Відповіді:


231

На жаль, посилання в тексті винятку 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

177

Я закрив програму IDE Visual Studio і знову відкрив її, клацнувши правою кнопкою миші на піктограму Visual Studio і сказавши "Запустити як адміністратор". Потім, коли я запустив хоста, це спрацювало !!!


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

3
Добре горе! Friggin MS, роблячи різні функціональні можливості, які борються за себе. Стільки за "найменшу пільгу".
Dan Csharpster

1
Найкраща практика чи ні, це стосується МС. Чому WCF / .NET настільки особливий, що йому потрібно ще один обруч, щоб перескочити? Якщо я напишу службу на Java, що працює під керуванням Windows, чуб вона працює локально. Якщо я хочу оприлюднити це, я налаштовую брандмауер, комутатор, маршрутизатор тощо
Kai Wang

1
-1. Це не правильно робити. Ви повинні надати явний дозвіл обмеженому користувачеві і використовувати це. @ Брайан відповідь нижче краще.
Даніель Джеймс Брайарс

2
-1. Це те саме, що переформатувати жорсткий диск, коли є проблема, і сказати, що проблема вирішена. Відповідь, як було зазначено, запускати netssh
Стан Баштавенко

19

Клацніть правою кнопкою миші на Visual Studio> Запустити як адміністратор> Відкрийте проект та запустіть службу. Це питання, пов'язане з пільгами.


Працювали для мене. Дякую!
Лосбер

14

Вам потрібна певна привілей адміністратора до вашого облікового запису, якщо ваша машина в локальній мережі, то ви застосуєте певну привілей адміністратора до свого користувача, ви повинні почати ідею як адміністратор ...


2
Це те, що мені потрібно було зробити для сервісу вікон WCF. Я використовував новий обліковий запис домену, щоб запустити службу на машині побудови. Моя служба запуститься, а потім викине цей виняток. Як тільки я дав йому права адміністратора, він справно працював.
thehelix

Це вирішило це для мене. Просто натисніть на сервіс правою кнопкою миші, а у вкладці "Увійти" виберіть "Обліковий запис локальної системи"
Alexander Derck

11

Просте, що вам потрібно зробити, це закрити візуальне середовище Visual Studio і відкрити його знову, використовуючи «Запустити як адміністратор». Тепер він повинен працювати успішно.


18
Запуск адміністратора лише уникає проблем, але їх не вирішує.
ПрофК

6

У Windows Vista та пізніших версіях служби HTTP WCF може спричинити виняток, про який ви згадали, оскільки обмежений обліковий запис не має права на це. Ось чому це спрацювало, коли ви керували ним адміністратором.

Кожен розумний розробник повинен використовувати ВІДКРИТИЙ акаунт, а не як адміністратор, але багато людей йдуть неправильним шляхом, і саме тому там так багато додатків, що ЗАБЕЗПЕЧИТИ дозволи адміністратора, коли вони насправді не потрібні. Працюючи лінивим способом, виходить ліниві рішення. Сподіваюся, ви все ще працюєте в обмеженому обліковому записі (мої вітання).

Там є інструмент (починаючи з 2008 року або більше), який називається NamespaceManagerTool, якщо я правильно пам’ятаю, який повинен надавати обмежені права доступу користувачів на ці URL-адреси сервісу, які ви визначаєте для WCF. Я цього не використовував, хоча ...


Інструмент, про який ви думаєте, називається Http Namespace Manager. Він не підтримується MS, але він доступний тут: blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Gareth

1

Ваш зразок коду не буде працювати, як показано, тому що ви забули включити Console.ReadLine()перед serviceHost.Close()рядком. Це означає, що хост відкривається, а потім негайно закривається.

Крім цього, здається, у вас є проблема з дозволом на вашу машину. Переконайтеся, що ви ввійшли в систему як обліковий запис адміністратора на своєму комп'ютері. Якщо ви адміністратор, можливо, у вас немає служби WideSVC для обробки запитів HTTP.


Я вже виправив цю проблему, і це не через мій обліковий запис cmd і (звичайно), не через ReadLine () - тому що точка полягає у виключенні (не результат cmd).
валекодер

Я вирішив це за допомогою stackoverflow.com/questions/885744/… .
валекодер

1

Хоча мені вдалося вирішити цю проблему на одному комп’ютері за рішеннями інших користувачів, команда netshне вирішила проблему в одній з моїх машин, і навіть незважаючи на те, що поточний користувач мав права адміністратора, я все ще отримував "HTTP не міг зареєструвати URL .... Ваш процес не має прав доступу до цього простору імен ". Тому я ділюсь своїм рішенням, якщо ви все ще не змусите його працювати з іншими рішеннями.

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

Як показують зображення, представлені нижче, я налаштував фізичні дані про свій веб-сайт, щоб підключитися як користувач specifc, який був обліковим записом адміністратора з DOMAIN \ ім'ям користувача та паролем, і цього було достатньо, щоб помилка не зникала.

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

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

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


-1

Закрийте iis express і всі веб-переглядачі (якщо URL-адреса була відкрита в будь-якому браузері). Також відкрийте візуальну студію IDE в режимі адміністратора. Це вирішило мою проблему.


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