2012-01-04 73 views
146

Soy un principiante en WCF, pero trato de mejorar mi experiencia. Y en el primer paso, enfrenté el problema. Creé el servicio WCF más simple. La lista del código: (todo el código en un archivo)HTTP no pudo registrar la URL http: // +: 8000/HelloWCF /. Su proceso no tiene derechos de acceso a este espacio de nombres

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 da 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 (vea http://go.microsoft.com/fwlink/?LinkId=70353 para más detalles).

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

+0

estoy confundido. ¿Se supone que el texto escapado de HTML es parte del código? – Amy

+1

busque aquí otra opción [http://stackoverflow.com/questions/885744/wcf-servicehost-access-rights] – shankbond

+0

Gracias @shankbond – User

Respuesta

0

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

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

+0

Ya he solucionado este problema y no es por mi cuenta de cmd y (de Por supuesto) no debido a ReadLine() - porque el punto está en la excepción (no en el resultado del cmd). – valecoder

+0

Lo resolví con http://stackoverflow.com/questions/885744/wcf-servicehost-access-rights. – valecoder

160

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

+16

En primer lugar, esta es una mala práctica aunque Visual Studio deja pocas opciones aquí. En segundo lugar, el problema persiste en otros pasos (por ejemplo, implementado). Vea la respuesta de Bryan o http://blogs.msdn.com/b/paulwh/archive/2007/05/04/addressaccessdeniedexception-http-could-not-register-url-http-8080.aspx –

+3

¡Buena pena! Friggin MS, haciendo diferentes funcionalidades que se combaten a sí mismas. Tanto para "menos privilegio". –

+0

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 el cortafuegos, el conmutador, el enrutador, etc. –

4

En Windows Vista y posterior, el material del servicio HTTP WCF provocaría la excepción mencionada porque una cuenta restringida no tiene derecho para eso. Esa es la razón por la que funcionó cuando lo ejecutó como administrador.

Cada desarrollador sensato debe usar una cuenta RESTRINGIDA en lugar de como 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 necesarios. Trabajar de manera perezosa da como resultado soluciones perezosas. Espero que todavía trabajes en una cuenta restringida (mis felicitaciones).

Existe una herramienta (desde 2008 más o menos) llamada NamespaceManagerTool si recuerdo correctamente que se supone que otorga los permisos de usuario restringido en estas URL de servicio que define para WCF. No he usado eso sin embargo ...

+0

La herramienta que está pensando se llama Http Namespace Manager. No está soportado por MS pero está disponible aquí: http://blogs.msdn.com/b/paulwh/archive/2007/05/04/addressaccessdeniedexception-http-could-not-register-url-http-8080.aspx – Gareth

11

Necesita privilegios de administrador en su cuenta si su máquina en la red de área local luego aplica algún privilegio de administrador a su usuario; debería iniciar ide como administrador ...

+1

This es lo que necesitaba hacer para mi servicio de ventanas WCF. Estaba usando una nueva cuenta de dominio para ejecutar el servicio en una máquina de compilación. Mi servicio se iniciará y luego arrojará esa excepción.Una vez que le di los derechos de administrador, funcionó perfectamente. – thehelix

+0

Esto lo resolvió para mí. Simplemente haga clic derecho en el servicio, y en la pestaña "iniciar sesión", seleccione "Cuenta del sistema local" –

185

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

Básicamente informa que utilice el siguiente comando:

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

Puede obtener más ayuda sobre los datos utilizando la ayuda de netsh

Por ejemplo: netsh http add ?

ofrece ayuda en el comando http add.

+3

Este método también es útil para configurar los permisos necesarios en un servidor de prueba automatizado. – Technobabble

+6

Esta debería ser la respuesta aceptada. –

+3

Asegúrese de ejecutar el comando desde un símbolo del sistema del administrador. – mbonness

8

Lo simple que tiene que hacer es cerrar el entorno de Visual Studio y abrirlo de nuevo con 'Ejecutar como administrador'. Ahora debería ejecutarse con éxito.

+12

Correr como administrador solo evita problemas, no los soluciona. – ProfK

0

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

7

Haz clic derecho en Visual Studio> Ejecutar como administrador> Abre tu proyecto y ejecuta el servicio. Este es un problema relacionado con el privilegio.

0

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

Después de intentar dar 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 las imágenes a continuación muestran, que configuran las Credenciales ruta física de mi página web para conectarse como un usuario specifc, que era una cuenta de administrador con el dominio \ nombre de usuario y contraseña, y esto fue suficiente para hacer que el disapear error.

enter image description here

enter image description here

enter image description here

Cuestiones relacionadas