HTTP no pudo registrar la URL http: // +: 8000 / HelloWCF /. Su proceso no tiene derechos de acceso a este espacio de nombres

179

Soy un principiante en WCF, pero trato de mejorar mi experiencia. Y en el primer paso me enfrenté al problema. Creé el servicio WCF más simple. La lista de código: (todo el código en un archivo)

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

Ese sería el servicio que me daría un número a través de la consola. Pero la depuración me da la excepción: (en lugar de número :))

HTTP no pudo registrar la URL http: // +: 8000 / HelloWCF / . Su proceso no tiene derechos de acceso a este espacio de nombres (consulte http://go.microsoft.com/fwlink/?LinkId=70353 para más detalles).

¿Alguna vez has enfrentado la misma situación? Estaré encantado de ver todos los consejos.

valecoder
fuente
Estoy confundido. ¿Se supone que ese texto escapado de HTML es parte del código?
Amy
1
busque aquí otra opción [ stackoverflow.com/questions/885744/…
shankbond

Respuestas:

231

Lamentablemente, el enlace en el texto de excepción, http://go.microsoft.com/fwlink/?LinkId=70353 , está roto. Sin embargo, solía conducir a http://msdn.microsoft.com/en-us/library/ms733768.aspx, que explica cómo configurar los permisos.

Básicamente le informa que use el siguiente comando:

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

Puede obtener más ayuda sobre los detalles con la ayuda de netsh

Por ejemplo: netsh http add ?

Da ayuda en el http addcomando.

Bryan
fuente
3
Este método también es útil para configurar los permisos necesarios en un servidor de prueba automatizado.
Technobabble
8
Asegúrese de ejecutar el comando desde un símbolo del sistema del administrador.
mbonness
3
Si no está en un dominio, solo use COMPUTER_NAME\USER_NAMEel comando anterior.
dotNET
puede ejecutar esto netsh http add urlacl url=http://+:80/ user=DOMAIN\usersi desea otorgar a la cuenta derechos de acceso a cualquier espacio de nombres en el puerto.
Hamid Heydarian
¿debería ser esto en la máquina del cliente o en el servidor o en ambos? ¿y qué se debe usar en http: //? la ip del cliente o el servidor? Como de costumbre, la ayuda es inútil
GuidoG
177

Cerré el IDE de Visual Studio y lo volví a abrir haciendo clic derecho en el ícono de Visual Studio y diciendo "Ejecutar como administrador". Luego, cuando ejecuté el host, ¡funcionó!

John Royceton Arthur
fuente
17
Primero, esta es una mala práctica, aunque Visual Studio deja pocas opciones aquí. En segundo lugar, el problema sigue en otros pasos (por ejemplo, implementado). Vea la respuesta de Bryan o blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Stéphane Gourichon
3
¡Caramba! Friggin MS, haciendo una funcionalidad diferente que lucha contra sí misma. Demasiado para el "menor privilegio".
Dan Csharpster
1
Mejor práctica o no, esto está en MS. ¿Por qué WCF / .NET es tan especial que necesita un aro más para saltar? Si escribo un servicio en Java que se ejecuta en Windows, bang funciona localmente. Si quiero hacerlo público, ajusto cortafuegos, conmutador, etc. enrutador
Kai Wang
1
-1. Esto no es lo correcto. Debe otorgar permiso explícito a un usuario restringido y usarlo. La respuesta de @ Bryan a continuación es mejor.
Daniel James Bryars
2
-1. Es lo mismo que formatear el disco duro cuando hay un problema y decir que el problema está resuelto. La respuesta es, como se señaló, ejecutar netssh
Stan Bashtavenko
19

Haga clic derecho en Visual Studio> Ejecutar como administrador> Abra su proyecto y ejecute el servicio. Este es un problema relacionado con los privilegios.

usuario3264537
fuente
Trabajó para mi. ¡Gracias!
Losbear
14

Necesita algunos privilegios de administrador para su cuenta si su máquina en la red de área local aplica entonces algunos privilegios de administrador a su usuario; de lo contrario, debe comenzar ide como administrador ...

Pramod Lawate
fuente
2
Esto es lo que necesitaba hacer para mi servicio de Windows WCF. Estaba usando una nueva cuenta de dominio para ejecutar el servicio en una máquina de compilación. Mi servicio comenzaría y luego lanzaría esa excepción. Una vez que le di derechos de administrador, funcionó perfectamente.
thehelix
Esto lo resolvió para mí. Simplemente haga clic con el botón derecho en el servicio y en la pestaña "iniciar sesión" elija "Cuenta del sistema local"
Alexander Derck
11

Lo simple que debe hacer es cerrar su entorno de Visual Studio y abrirlo nuevamente usando 'Ejecutar como administrador'. Ahora debería ejecutarse con éxito.

Mahesh.P
fuente
18
Ejecutar como administrador solo evita problemas, no los resuelve.
ProfK
6

En Windows Vista y versiones posteriores, las cosas del servicio HTTP WCF causarían la excepción que mencionó porque una cuenta restringida no tiene derecho a eso. Esa es la razón por la que funcionó cuando lo ejecutó como administrador.

Todo desarrollador sensato debe usar una cuenta RESTRINGIDA en lugar de un Administrador, sin embargo, muchas personas van por el camino equivocado y es precisamente por eso que hay tantas aplicaciones que EXIGEN permisos de administrador cuando en realidad no son necesarias. Trabajar de manera perezosa resulta en soluciones perezosas Espero que sigas trabajando en una cuenta restringida (mis felicitaciones).

Hay una herramienta por ahí (desde 2008 más o menos) llamada NamespaceManagerTool si recuerdo correctamente que se supone que debe otorgar los permisos de usuario restringidos en estas URL de servicio que usted define para WCF. Aunque no he usado eso ...

Señor de los guiones
fuente
La herramienta en la que está pensando se llama Http Namespace Manager. MS no lo admite, pero está disponible aquí: blogs.msdn.com/b/paulwh/archive/2007/05/04/…
Gareth
1

Su código de muestra no funcionará como se muestra porque olvidó incluir un Console.ReadLine()antes de la serviceHost.Close()línea. Eso significa que el host se abre y luego se cierra inmediatamente.

Aparte de eso, parece que tiene un problema de permiso en su máquina. Asegúrese de haber iniciado sesión como una cuenta de administrador en su máquina. Si es administrador, es posible que no tenga el Servicio de publicación World Wide Web (W3SVC) ejecutándose para manejar solicitudes HTTP.

Sixto Saez
fuente
Ya he solucionado este problema y eso no se debe a mi cuenta de cmd y (por supuesto) no a ReadLine (), porque el punto está en la excepción (no es el resultado del cmd).
valecoder
Lo resolví con stackoverflow.com/questions/885744/… .
valecoder
1

Si bien pude resolver este problema en una computadora siguiendo las soluciones de otros usuarios, el comando netshno resolvió el problema en una de mis máquinas y, aunque el usuario actual tenía derechos de administrador, todavía recibía el mensaje "HTTP no pudo registrar URL .... Su proceso no tiene derechos de acceso a este espacio de nombres ". Por lo tanto, comparto mi solución en caso de que todavía no lo haga funcionar con las otras soluciones también.

Después de intentar también otorgar permisos de escritura al usuario en el directorio físico de mi sitio web y no tener éxito, finalmente decidí intentar cambiar la configuración de IIS .

Como muestran las imágenes a continuación, configuré las Credenciales de ruta física de mi sitio web para conectarme como un usuario específico, que era una cuenta de administrador con DOMINIO \ nombre de usuario y contraseña, y esto fue suficiente para que desapareciera el error.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Ulises Alves
fuente
-1

Cierre iis express y todos los navegadores (si la url se abrió en alguno de los navegadores). También abra el IDE de Visual Studio en modo administrador. Esto ha resuelto mi problema.

Lokesh
fuente
No resolvió el problema. Usar un IDE en modo Administrador es otro problema y probablemente sea más grave.
Preza8