HTTP non è riuscito a registrare l'URL http: // +: 8000 / HelloWCF /. Il tuo processo non ha diritti di accesso a questo spazio dei nomi


179

Sono un principiante in WCF, ma sto cercando di migliorare la mia esperienza. E sul primo passo ho affrontato il problema. Ho creato il servizio WCF più semplice. L'elenco di codice: (tutto il codice in un file)

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

Sarebbe il servizio che mi darebbe un numero tramite console. Ma il debug mi dà l'eccezione: (invece del numero :))

HTTP non è riuscito a registrare l'URL http: // +: 8000 / HelloWCF / . Il tuo processo non ha diritti di accesso a questo spazio dei nomi (vedi http://go.microsoft.com/fwlink/?LinkId=70353 per i dettagli).

Hai mai affrontato la stessa situazione? Sarò felice di vedere ogni consiglio.


Non ho capito bene. Quel testo con escape HTML dovrebbe far parte del codice?
Amy,

1
guarda qui l'altra opzione di [ stackoverflow.com/questions/885744/...
shankbond

Risposte:


231

Purtroppo il collegamento nel testo dell'eccezione, http://go.microsoft.com/fwlink/?LinkId=70353 , è interrotto. Tuttavia, conduceva a http://msdn.microsoft.com/en-us/library/ms733768.aspx che spiega come impostare le autorizzazioni.

In sostanza ti informa di usare il seguente comando:

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

Puoi ottenere più aiuto sui dettagli usando l'aiuto di netsh

Per esempio: netsh http add ?

Fornisce aiuto sul http addcomando.


3
Questo metodo è utile anche per impostare le autorizzazioni necessarie su un server di test automatizzato.
Technobabble il

8
Assicurarsi di eseguire il comando dal prompt dei comandi dell'amministratore.
mbonness

3
Se non sei su un dominio, utilizza COMPUTER_NAME\USER_NAMEil comando sopra.
dotNET,

è possibile eseguirlo netsh http add urlacl url=http://+:80/ user=DOMAIN\userse si desidera concedere all'account i diritti di accesso a tutti gli spazi dei nomi sulla porta.
Hamid Heydarian,

questo dovrebbe essere don sul computer client o un server o entrambi? e cosa dovrebbe essere usato in http: //? l'ip del client o del server? Come al solito, l'aiuto è inutile
GuidoG,

177

Ho chiuso l'IDE di Visual Studio e l'ho riaperto facendo clic con il tasto destro sull'icona di Visual Studio e dicendo "Esegui come amministratore", quindi quando ho eseguito l'host, ha funzionato !!!


17
Innanzitutto, questa è una cattiva pratica sebbene Visual Studio lasci poca scelta qui. In secondo luogo, il problema rimane ad altri passaggi (ad esempio, distribuito). Vedi la risposta di Bryan o blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Stéphane Gourichon

3
Santo cielo! Friggin MS, realizzando diverse funzionalità che si combattono da sole. Questo per quanto riguarda il "privilegio minimo".
Dan Csharpster,

1
Le migliori pratiche o no, questo è per la SM. Perché WCF / .NET è così speciale che ha bisogno di un altro telaio per saltare? Se scrivo un servizio in Java in esecuzione su Windows, bang funziona localmente. Se voglio renderlo pubblico, aggiorno firewall, switcher, router ecc.
Kai Wang

1
-1. Questa non è la cosa giusta da fare. È necessario concedere l'autorizzazione esplicita a un utente con restrizioni e utilizzarlo. @ La risposta di Bryan qui sotto è migliore.
Daniel James Bryars,

2
-1. È lo stesso che riformattare il disco rigido quando c'è un problema e dire che il problema è risolto. La risposta è, come è stato sottolineato, eseguire netssh
Stan Bashtavenko,

19

Fare clic con il tasto destro su Visual Studio> Esegui come amministratore> Aprire il progetto ed eseguire il servizio. Questo è un problema relativo ai privilegi.


Ha funzionato per me. Grazie!
Losbear,

14

Hai bisogno di alcuni privilegi di amministratore per il tuo account se la tua macchina nella rete locale quindi applica alcuni privilegi di amministratore al tuo utente altrimenti dovresti avviare ide come amministratore ...


2
Questo è ciò che dovevo fare per il mio servizio Windows WCF. Stavo usando un nuovo account di dominio per eseguire il servizio su una macchina di compilazione. Il mio servizio si avvia e quindi genera quell'eccezione. Una volta che gli ho dato i diritti di amministratore, ha funzionato perfettamente.
thehelix il

Questo mi ha risolto. Basta fare clic con il pulsante destro del mouse sul servizio e nella scheda "Accedi" selezionare "Account di sistema locale"
Alexander Derck

11

La semplice cosa che devi fare è chiudere il tuo ambiente di Visual Studio e riaprirlo usando "Esegui come amministratore". Ora dovrebbe funzionare correttamente.


18
L'esecuzione come amministratore evita solo problemi, non li risolve.
ProfK,

6

In Windows Vista e versioni successive il servizio HTTP WCF causerebbe l'eccezione menzionata perché un account con restrizioni non ha diritto a ciò. Questo è il motivo per cui ha funzionato quando è stato eseguito come amministratore.

Ogni sviluppatore sensibile deve utilizzare un account RISERVATO piuttosto che come amministratore, tuttavia molte persone vanno nella direzione sbagliata ed è proprio per questo che ci sono così tante applicazioni là fuori che RICHIEDONO le autorizzazioni di amministratore quando non sono realmente richieste. Lavorare in modo pigro porta a soluzioni pigre. Spero che lavori ancora in un account limitato (i miei complimenti).

Esiste uno strumento là fuori (dal 2008 o giù di lì) chiamato NamespaceManagerTool se ricordo correttamente che si suppone che conceda le autorizzazioni utente limitate su questi URL di servizio definiti per WCF. Non l'ho usato però ...


Lo strumento a cui stai pensando si chiama Http Namespace Manager. Non è supportato da MS ma è disponibile qui: blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Gareth,

1

Il tuo codice di esempio non funzionerà come mostrato perché hai dimenticato di includere un Console.ReadLine()prima diserviceHost.Close() riga. Ciò significa che l'host viene aperto e quindi immediatamente chiuso.

A parte questo, sembra che tu abbia un problema di autorizzazione sulla tua macchina. Assicurati di aver effettuato l'accesso come account amministratore sul tuo computer. Se sei un amministratore, è possibile che tu non abbia il servizio di pubblicazione sul Web (W3SVC) in esecuzione per gestire le richieste HTTP.


Ho già risolto questo problema e questo non è a causa del mio account cmd e (ovviamente) non a causa di ReadLine () - perché il punto è nell'eccezione (non il risultato cmd).
Valecoder


1

Mentre sono stato in grado di risolvere questo problema in un computer seguendo le soluzioni degli altri utenti, il comando netshnon ha risolto il problema in una delle mie macchine e anche se l'utente corrente aveva i diritti di amministratore, continuavo a ricevere l' URL "Impossibile registrare l'URL .... Il tuo processo non ha diritti di accesso a questo spazio dei nomi ". Quindi sto condividendo la mia soluzione nel caso in cui ancora non riesca a farlo funzionare anche con le altre soluzioni.

Dopo aver anche provato a concedere le autorizzazioni di scrittura all'utente nella directory fisica del mio sito Web e non ho avuto successo, ho finalmente deciso di provare a modificare le impostazioni IIS .

Come mostrano le immagini seguenti, ho configurato le credenziali del percorso fisico del mio sito Web per connettermi come un utente specifico, che era un account amministratore con DOMINIO \ nome utente e password, e questo è stato sufficiente per far scomparire l'errore.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


-1

Chiudi iis express e tutti i browser (se l'URL è stato aperto in uno qualsiasi dei browser). Apri anche l'IDE di Visual Studio in modalità amministratore. Questo ha risolto il mio problema.


Non ha risolto il problema. L'uso di un IDE in modalità amministratore è un altro problema e probabilmente più grave.
Preza8,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.