I've created a self hosted Nancy/SignalR application self-hosted in OWIN using Microsoft.Owin.Host.HttpListener
and Microsoft.Owin.Hosting
Things work perfectly fine locally but as soon as I try to use anything but localhost to access the app I get a HTTP Error 503. The service is unavailable
error. I can't even access the app using 127.0.0.1
or the machine name.
I've tried adding the port to urlacl using
http add urlacl http://*:8989/ user=EVERYONE
but doesn't seem to do anything.
here are the OWIN start options that I've tried,
var options = new StartOptions
{
Url = "127.0.0.1",
App = GetType().AssemblyQualifiedName,
Port = _configFileProvider.Port
};
var options = new StartOptions
{
App = GetType().AssemblyQualifiedName,
Port = _configFileProvider.Port
};
Here is the source code for the file that starts and stops the server.
Continuing on the same path, this article exlains how to self-host the Web API, using OWIN custom host. So let's start with it. Add a new Console application and let's call it WebAPIOWINHosting. Next, in order to create a Web API and use OWIN custom host, we add references to Microsoft.AspNet.WebApi.OwinSelfHost, using the Nuget Package Manager.
I've created a self hosted Nancy/SignalR application self-hosted in OWIN using Microsoft.Owin.Host.HttpListener and Microsoft.Owin.Hosting Things work perfectly fine locally but as soon as I try to use anything but localhost to access the app I get a HTTP Error 503.
The "Startup" class tells how Owin handles the web requests. The name of the class is not important, but it needs to implement the "public void Configuration (IAppBuilder app)" method; When the program runs, we can use the "WebApp.Start<Startup> ("http://*:800/")" syntax to start the Owin application.
“WebApp.Start” method takes an URL as an argument where the self-hosted output will be displayed. { Console.WriteLine ("Press [enter] to quit..."); Console.ReadLine (); } Run the console application or press Ctrl + F5. A command prompt session will be fired, which acts as a self-host server. Browse URL parameter supplied in WebApp.Start method.
so it turns out you need to pass in a url into StartOptions
in the same format as the urlacl.
Changing the start options to the code below fixed the problem. now the app is accessible across the network.
var options = new StartOptions("http://*:8989")
{
ServerFactory = "Microsoft.Owin.Host.HttpListener"
};
I spend many hours solving similar issue on Windows 8.1.
StartOptions options = new StartOptions();
options.Urls.Add("http://localhost:9000");
options.Urls.Add("http://127.0.0.1:9000");
options.Urls.Add("http://192.168.0.102:9000");
options.Urls.Add(string.Format("http://{0}:9000", Environment.MachineName));
WebApp.Start<Startup>(options);
I could not listen or was getting 503 error...
If you want to listen on several IP addresses, each address needs its own urlacl record:
Does NOT work:
netsh http>add urlacl http://+:9000/ user=EveryOne
OK:
netsh http>add urlacl http://localhost:9000/ user=EveryOne
netsh http>add urlacl http://127.0.0.1:9000/ user=EveryOne
etc.
After adding reservation for each address individually, everything works fine.
Thanks to the info that @kay.one provided I was able to access my self-hosted Web API 2.2 (OWIN/Katana, console app) from the same machine via IP address. However just consolidate it into a simple step-by-step:
Main
of Program.cs (for console app): WebApp.Start<Startup>("http://*:8080");
netsh http add urlacl http://*:8080/ user=EVERYONE
You should then be able to access from another machine using IP address or computer name.
Disclaimer: I'm not a security expert so I don't know the security implications of doing this.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With