HTTP nie może zarejestrować adresu URL http: // +: 8000 / HelloWCF /. Twój proces nie ma praw dostępu do tej przestrzeni nazw

179

Jestem początkującym w WCF, ale staram się poprawić swoje wrażenia. I na pierwszym etapie stanąłem przed problemem. Stworzyłem najprostszą usługę WCF. Lista kodu: (cały kod w jednym pliku)

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();
        }
    }
}

To byłaby usługa, która daje mi numer za pośrednictwem konsoli. Ale debugowanie daje mi wyjątek: (zamiast numeru :))

HTTP nie może zarejestrować adresu URL http: // +: 8000 / HelloWCF / . Twój proces nie ma praw dostępu do tej przestrzeni nazw ( szczegółowe informacje można znaleźć na stronie http://go.microsoft.com/fwlink/?LinkId=70353 ).

Czy kiedykolwiek spotkałeś się z tą samą sytuacją? Z przyjemnością zobaczę każdą radę.

walecoder
źródło
Jestem zmieszany. Czy ten tekst z kodem ucieczki HTML powinien być częścią kodu?
Amy
1
poszukaj innej opcji [ stackoverflow.com/questions/885744/…
shankbond,

Odpowiedzi:

231

Niestety link w tekście wyjątku http://go.microsoft.com/fwlink/?LinkId=70353 jest uszkodzony. Jednak kiedyś prowadził do http://msdn.microsoft.com/en-us/library/ms733768.aspx, który wyjaśnia, jak ustawić uprawnienia.

Zasadniczo informuje o użyciu następującego polecenia:

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

Możesz uzyskać więcej pomocy na temat szczegółów, korzystając z pomocy netsh

Na przykład: netsh http add ?

Udziela pomocy w http addpoleceniu.

Bryan
źródło
3
Ta metoda jest również przydatna do konfigurowania wymaganych uprawnień na automatycznym serwerze testowym.
Technobabble
8
Pamiętaj, aby uruchomić polecenie z wiersza polecenia administratora.
mbonness
3
Jeśli nie jesteś w domenie, po prostu użyj COMPUTER_NAME\USER_NAMEpowyższego polecenia.
dotNET
możesz to uruchomić, netsh http add urlacl url=http://+:80/ user=DOMAIN\userjeśli chcesz przyznać prawu dostępu do konta do dowolnej przestrzeni nazw na porcie.
Hamid Heydarian
czy powinien to być don na komputerze klienckim, serwerze, czy na obu urządzeniach? i czego należy używać w http: //? adres IP klienta lub serwera? Jak zwykle pomoc jest bezużyteczna
GuidoG
177

Zamknąłem IDE Visual Studio i otworzyłem go ponownie, klikając prawym przyciskiem myszy ikonę Visual Studio i mówiąc „Uruchom jako administrator”, a potem, kiedy uruchomiłem hosta, działało !!!

John Royceton Arthur
źródło
17
Po pierwsze, jest to zła praktyka, chociaż Visual Studio nie pozostawia tutaj wyboru. Po drugie, problem pozostaje na innych etapach (np. Wdrożony). Zobacz odpowiedź Bryana lub blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Stéphane Gourichon
3
O jeny! Friggin MS, tworząc inną funkcjonalność, która walczy sama. Tyle o „najmniejszych przywilejach”.
Dan Csharpster,
1
Najlepsza praktyka czy nie, to jest na stwardnieniu rozsianym. Dlaczego WCF / .NET jest tak wyjątkowy, że do przeskoczenia potrzebuje jeszcze jednej obręczy? Jeśli piszę usługę w Javie działającą w systemie Windows, Bang działa lokalnie. Jeśli chcę to upublicznić, dostosowuję zaporę ogniową, przełącznik, router itp.
Kai Wang
1
-1. To nie jest właściwe. Powinieneś udzielić wyraźnego pozwolenia ograniczonemu użytkownikowi i z niego korzystać. @ Odpowiedź Bryana poniżej jest lepsza.
Daniel James Bryars,
2
-1. Jest to to samo, co formatowanie dysku twardego, gdy występuje problem i powiedzenie, że problem został rozwiązany. Jak już wspomniano, odpowiedzią jest uruchomienie netssh
Stan Bashtavenko
19

Kliknij prawym przyciskiem myszy Visual Studio> Uruchom jako administrator> Otwórz projekt i uruchom usługę. Jest to problem związany z uprawnieniami.

użytkownik3264537
źródło
Pracował dla mnie. Dzięki!
Losbear,
14

Potrzebujesz trochę uprawnień administratora do swojego konta, jeśli twój komputer w sieci lokalnej, a następnie zastosujesz jakieś uprawnienia administratora do swojego użytkownika, w przeciwnym razie powinieneś zacząć ide jako administrator ...

Prawo Pramod
źródło
2
Właśnie to musiałem zrobić dla mojej usługi Windows WCF. Korzystałem z nowego konta domeny, aby uruchomić usługę na komputerze kompilacji. Moja usługa uruchomi się, a następnie wyrzuci ten wyjątek. Gdy dałem mu uprawnienia administratora, działało idealnie.
thehelix,
To rozwiązało dla mnie. Wystarczy kliknąć usługę prawym przyciskiem myszy, a na zakładce „zaloguj się” wybrać „Lokalne konto systemowe”
Alexander Derck
11

Prostą rzeczą, którą musisz zrobić, to zamknąć środowisko Visual Studio i otworzyć je ponownie, używając opcji „Uruchom jako administrator”. Powinien teraz działać poprawnie.

Mahesh.P
źródło
18
Uruchamianie jako administrator pozwala tylko uniknąć problemów, ale ich nie rozwiązuje.
ProfK
6

W systemie Windows Vista i nowszych rzeczy usługa HTTP WCF spowodowałaby wspomniany wyjątek, ponieważ ograniczone konto nie ma do tego prawa. To jest powód, dla którego działało, gdy uruchomiłeś go jako administrator.

Każdy rozsądny programista musi korzystać z konta OGRANICZONEGO, a nie jako administratora, ale wiele osób idzie w niewłaściwy sposób i właśnie dlatego jest tak wiele aplikacji, że uprawnienia administratora DEMAND, gdy nie są tak naprawdę wymagane. Leniwa praca skutkuje leniwymi rozwiązaniami. Mam nadzieję, że nadal pracujesz na koncie zastrzeżonym (moje gratulacje).

Istnieje narzędzie (od około 2008 r.) O nazwie NamespaceManagerTool, jeśli dobrze pamiętam, które powinno udzielać ograniczonych uprawnień użytkownikom na adresy URL usług zdefiniowane dla WCF. Nie użyłem tego jednak ...

Lord of Scripts
źródło
Narzędzie, o którym myślisz, nazywa się Http Namespace Manager. Nie jest obsługiwany przez stwardnienie rozsiane, ale jest dostępny tutaj: blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Gareth
1

Twój przykładowy kod nie będzie działał tak, jak pokazano, ponieważ zapomniałeś dołączyć Console.ReadLine()przed serviceHost.Close()wierszem. Oznacza to, że host jest otwarty, a następnie natychmiast zamknięty.

Poza tym wygląda na to, że masz problem z uprawnieniami na swoim komputerze. Upewnij się, że jesteś zalogowany jako konto administratora na swoim komputerze. Jeśli jesteś administratorem, być może nie masz uruchomionej usługi publikowania w sieci WWW (W3SVC) do obsługi żądań HTTP.

Sixto Saez
źródło
Naprawiłem już ten problem i to nie z powodu mojego konta cmd i (oczywiście) nie z powodu ReadLine () - ponieważ punkt jest wyjątkiem (nie wynik cmd).
valecoder
Rozwiązałem to za pomocą stackoverflow.com/questions/885744/… .
valecoder
1

Podczas gdy byłem w stanie rozwiązać ten problem na jednym komputerze zgodnie z rozwiązaniami innych użytkowników, polecenie netshnie rozwiązało problemu na jednym z moich komputerów i chociaż obecny użytkownik miał uprawnienia administratora, nadal otrzymywałem komunikat „HTTP nie mógł zarejestrować adresu URL .... Twój proces nie ma praw dostępu do tej przestrzeni nazw ". Dlatego dzielę się moim rozwiązaniem na wypadek, gdybyś nadal nie działał z innymi rozwiązaniami.

Po próbie nadania użytkownikowi uprawnień do zapisu w fizycznym katalogu mojej witryny i bez powodzenia, w końcu postanowiłem zmienić ustawienia IIS .

Jak pokazują poniższe zdjęcia, skonfigurowałem dane uwierzytelniające ścieżki fizycznej w mojej witrynie, aby łączyły się jako określony użytkownik, którym było konto administratora z DOMAIN \ nazwa użytkownika i hasło, i to wystarczyło, aby błąd zniknął.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Ulisses Alves
źródło
-1

Zamknij iis express i wszystkie przeglądarki (jeśli adres URL został otwarty w dowolnej przeglądarce). Otwórz także studio graficzne IDE w trybie administratora. To rozwiązało mój problem.

Lokesh
źródło
To nie rozwiązało problemu. Używanie IDE w trybie administratora to kolejny problem i prawdopodobnie poważniejszy.
Preza8