Cómo arreglar una excepción automáticaUrlReservationCreationFailureException cuando se utiliza Nancy FX Self Host
netsh (3)
Al usar Nancy FX, encontré la siguiente excepción que se produjo al intentar iniciar un servicio web: AutomaticUrlReservationCreationFailureException
Después de examinarlo con más detalle, descubrí que la forma de solucionarlo era ejecutar un indicador de cmd (como administrador) y luego ejecutar el siguiente comando:
netsh http add urlacl url=http://+:1234/ user=DOMAIN/username
dónde
-
DOMAIN/username
es el ID del usuario con el que se ejecutará el servicio -
1234
es el puerto en el que se ejecutará el servicio.
Escribo esto aquí en caso de que alguien más encuentre el mismo problema y pase una media hora infructuosa en busca de una respuesta, ¡espero que lo encuentren antes que yo!
El Message
de la AutomaticUrlReservationCreationFailureException
le indicará esto
The Nancy self host was unable to start, as no namespace reservation existed for the provided url(s).
Please either enable CreateNamespaceReservations on the HostConfiguration provided to the NancyHost, or create the reservations manually with the (elevated) command(s):
http add urlacl url=http://+:8888/nancy/ user=Everyone
http add urlacl url=http://127.0.0.1:8888/nancy/ user=Everyone
http add urlacl url=http://+:8889/nancytoo/ user=Everyone
Las reservas sugeridas se basan en los URI base que usted pasa al host cuando lo crea.
La excepción AutomaticUrlReservationCreationFailureException
también aparecerá si está ejecutando NancyFX desde Visual Studio.
Así que asegúrese de estar ejecutando como administrador para que NancyFX configure las configuraciones subyacentes
Si está creando su propio host NancyFx, puede ser más fácil para usted marcar su Configuración de Host de esta manera
HostConfiguration hostConfigs = new HostConfiguration()
{
UrlReservations = new UrlReservations() { CreateAutomatically = true }
};
o...
HostConfiguration hostConfigs = new HostConfiguration();
hostConfigs.UrlReservations.CreateAutomatically = true;
Y, finalmente, tener algo como
NancyHost nancyHost = new NancyHost(new Uri("http://+:80"), new DefaultNancyBootstrapper(), hostConfigs);