HTTP konnte die URL http: // +: 8000 / HelloWCF / nicht registrieren. Ihr Prozess hat keine Zugriffsrechte auf diesen Namespace

179

Ich bin ein Anfänger in WCF, aber ich versuche meine Erfahrung zu verbessern. Und im ersten Schritt stand ich vor dem Problem. Ich habe den einfachsten WCF-Dienst erstellt. Die Auflistung des Codes: (der gesamte Code in einer Datei)

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

Das wäre der Dienst, der mir eine Nummer über die Konsole gibt. Aber Debug gib mir die Ausnahme: (anstelle von Nummer :))

HTTP konnte die URL http: // +: 8000 / HelloWCF / nicht registrieren . Ihr Prozess hat keine Zugriffsrechte auf diesen Namespace ( Einzelheiten finden Sie unter http://go.microsoft.com/fwlink/?LinkId=70353 ).

Haben Sie jemals die gleiche Situation erlebt? Ich freue mich über jeden Rat.

Valecoder
quelle
Ich bin verwirrt. Soll dieser HTML-maskierte Text Teil des Codes sein?
Amy
1
Suchen
Sie

Antworten:

230

Leider ist der Link im Ausnahmetext http://go.microsoft.com/fwlink/?LinkId=70353 fehlerhaft. Früher führte es jedoch zu http://msdn.microsoft.com/en-us/library/ms733768.aspx, in dem erläutert wird, wie die Berechtigungen festgelegt werden.

Grundsätzlich werden Sie aufgefordert, den folgenden Befehl zu verwenden:

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

Mithilfe von können Sie weitere Hilfe zu den Details erhalten netsh

Beispielsweise: netsh http add ?

Hilft beim http addBefehl.

Bryan
quelle
3
Diese Methode ist auch nützlich, um die erforderlichen Berechtigungen auf einem automatisierten Testserver einzurichten.
Technobabble
8
Stellen Sie sicher, dass Sie den Befehl an einer Administrator-Eingabeaufforderung ausführen.
Mbonness
3
Wenn Sie sich nicht in einer Domain befinden, verwenden Sie einfach COMPUTER_NAME\USER_NAMEden obigen Befehl.
dotNET
Sie können dies ausführen, netsh http add urlacl url=http://+:80/ user=DOMAIN\userwenn Sie dem Konto Zugriffsrechte auf Namespaces am Port gewähren möchten.
Hamid Heydarian
Sollte dies nicht auf dem Client-Computer oder auf dem Server oder auf beiden sein? und was sollte in http: // verwendet werden? die IP des Clients oder des Servers? Wie immer ist die Hilfe nutzlos
GuidoG
177

Ich habe die Visual Studio-IDE geschlossen und sie erneut geöffnet, indem ich mit der rechten Maustaste auf das Visual Studio-Symbol geklickt und "Als Administrator ausführen" gesagt habe. Als ich dann den Host ausgeführt habe, hat es funktioniert !!!

John Royceton Arthur
quelle
17
Erstens ist dies eine schlechte Praxis, obwohl Visual Studio hier wenig Auswahl lässt. Zweitens bleibt das Problem bei anderen Schritten (z. B. bereitgestellt). Siehe Bryans Antwort oder blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Stéphane Gourichon
3
Guter Kummer! Friggin MS, die verschiedene Funktionen entwickelt, die sich selbst bekämpfen. Soviel zum "geringsten Privileg".
Dan Csharpster
1
Best Practice oder nicht, dies ist auf MS. Warum ist WCF / .NET so besonders, dass es einen weiteren Rahmen benötigt, um durchzuspringen? Wenn ich einen Dienst in Java schreibe, der unter Windows ausgeführt wird, funktioniert er lokal. Wenn ich es öffentlich machen möchte, passe ich Firewall, Switcher, Router usw. an.
Kai Wang
1
-1. Dies ist nicht das Richtige. Sie sollten einem eingeschränkten Benutzer eine explizite Berechtigung erteilen und diese verwenden. @ Bryans Antwort unten ist besser.
Daniel James Bryars
2
-1. Es ist dasselbe wie das Neuformatieren der Festplatte, wenn ein Problem vorliegt und das Problem behoben ist. Die Antwort ist, wie bereits erwähnt, netssh
Stan Bashtavenko
19

Klicken Sie mit der rechten Maustaste auf Visual Studio> Als Administrator ausführen> Öffnen Sie Ihr Projekt und führen Sie den Dienst aus. Dies ist ein privilegiertes Problem.

user3264537
quelle
Hat für mich gearbeitet. Vielen Dank!
Losbear
14

Sie benötigen einige Administratorrechte für Ihr Konto, wenn sich Ihr Computer im lokalen Netzwerk befindet. Dann wenden Sie einige Administratorrechte auf Ihren Benutzer an. Andernfalls sollten Sie ide als Administrator starten.

Pramod Lawate
quelle
2
Dies musste ich für meinen WCF-Windows-Dienst tun. Ich habe ein neues Domänenkonto verwendet, um den Dienst auf einem Buildcomputer auszuführen. Mein Dienst würde starten und dann diese Ausnahme auslösen. Nachdem ich ihm Administratorrechte gegeben hatte, funktionierte es perfekt.
Thehelix
Das hat es für mich gelöst. Klicken Sie einfach mit der rechten Maustaste auf den Dienst und wählen Sie in der Registerkarte "Anmelden" "Lokales Systemkonto"
Alexander Derck
11

Sie müssen lediglich Ihre Visual Studio-Umgebung schließen und erneut öffnen, indem Sie "Als Administrator ausführen" verwenden. Es sollte jetzt erfolgreich ausgeführt werden.

Mahesh.P
quelle
18
Wenn Sie als Administrator ausgeführt werden, werden Probleme nur vermieden und nicht gelöst.
ProfK
6

In Windows Vista und höher würde das HTTP-WCF-Dienstmaterial die von Ihnen erwähnte Ausnahme verursachen, da ein eingeschränktes Konto dafür kein Recht hat. Dies ist der Grund, warum es funktioniert hat, als Sie es als Administrator ausgeführt haben.

Jeder vernünftige Entwickler muss ein EINGESCHRÄNKTES Konto verwenden und nicht als Administrator. Dennoch gehen viele Leute den falschen Weg, und genau deshalb gibt es so viele Anwendungen, dass Administratorrechte erforderlich sind, wenn sie nicht wirklich benötigt werden. Faul arbeiten führt zu faulen Lösungen. Ich hoffe, Sie arbeiten immer noch in einem eingeschränkten Konto (meine Glückwünsche).

Es gibt ein Tool namens NamespaceManagerTool (ab 2008), wenn ich mich richtig erinnere, das die eingeschränkten Benutzerberechtigungen für diese Service-URLs gewähren soll, die Sie für WCF definieren. Das habe ich aber nicht benutzt ...

Herr der Skripte
quelle
Das Tool, an das Sie denken, heißt Http Namespace Manager. Es wird von MS nicht unterstützt, ist aber hier verfügbar: blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Gareth
1

Ihr Beispielcode funktioniert nicht wie gezeigt, da Sie vergessen haben, ein Console.ReadLine()vor der serviceHost.Close()Zeile einzufügen. Das heißt, der Host wird geöffnet und sofort geschlossen.

Abgesehen davon scheint es, dass Sie ein Berechtigungsproblem auf Ihrem Computer haben. Stellen Sie sicher, dass Sie als Administratorkonto auf Ihrem Computer angemeldet sind. Wenn Sie ein Administrator sind, kann es sein, dass der World Wide Web Publishing Service (W3SVC) nicht ausgeführt wird, um HTTP-Anforderungen zu verarbeiten.

Sixto Saez
quelle
Ich habe dieses Problem bereits behoben und das liegt nicht an meinem cmd-Konto und (natürlich) nicht an ReadLine () - weil der Punkt in der Ausnahme liegt (nicht das cmd-Ergebnis).
Valecoder
Ich habe das mit stackoverflow.com/questions/885744/… gelöst .
Valecoder
1

Obwohl ich dieses Problem auf einem Computer nach den Lösungen der anderen Benutzer lösen konnte, löste der Befehl netshdas Problem auf einem meiner Computer nicht, und obwohl der aktuelle Benutzer über Administratorrechte verfügte, wurde immer noch die URL "HTTP konnte keine URL registrieren" angezeigt .... Ihr Prozess hat keine Zugriffsrechte auf diesen Namespace ". Ich teile meine Lösung für den Fall, dass Sie sie immer noch nicht mit den anderen Lösungen zum Laufen bringen.

Nachdem ich auch versucht hatte, dem Benutzer im physischen Verzeichnis meiner Website Schreibberechtigungen zu erteilen, und keinen Erfolg hatte, beschloss ich schließlich, die IIS-Einstellungen zu ändern .

Wie die folgenden Bilder zeigen, habe ich die Anmeldeinformationen für den physischen Pfad meiner Website so konfiguriert, dass eine Verbindung als bestimmter Benutzer hergestellt wird. Hierbei handelt es sich um ein Administratorkonto mit DOMAIN \ Benutzername und Kennwort. Dies war ausreichend, um den Fehler verschwinden zu lassen.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Ulysses Alves
quelle
-1

Schließen Sie iis express und alle Browser (wenn die URL in einem der Browser geöffnet wurde). Öffnen Sie auch die Visual Studio-IDE im Admin-Modus. Dies hat mein Problem behoben.

Lokesh
quelle
Das Problem wurde nicht gelöst. Die Verwendung einer IDE im Administratormodus ist ein weiteres Problem und wahrscheinlich schwerwiegender.
Preza8