Reputation: 491
I am trying to self host a Web Api service inside a windows forms application using the code below
namespace MascoteAquarium.Desktop
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
var config = new HttpSelfHostConfiguration("http://localhost:8080");
config.Routes.MapHttpRoute(
"DefaultApi", "api/{controller}/id", new { id = RouteParameter.Optional });
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMainMenu());
}
}
}
When I try
http://localhost:8080/api/*(some-controller)*
I receive a NullReferenceException at System.Web.Http.SelfHost.HttpSelfHostServer.ProcessRequestContext(ChannelContext channelContext, RequestContext requestContext)
Someone know what is happening? Is it possible to self host inside a Win Forms app?
Upvotes: 12
Views: 8005
Reputation: 131
The problem is that the HttpSelfHostServer object gets lost just before Application.Run(...), which contains the main event loop that keeps your program running. The using statement makes sure that Dispose method gets called for the object, in this case server, thus making it unavailable for answering requests, resulting in the NullReferenceException you are experiencing.
To fix the exception, your code should look like this:
...
using (HttpSelfHostServer server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMainMenu());
}
...
Upvotes: 12
Reputation: 27187
You need to run the WinForms application (or VS if you run the WinForm app from the debugger) with elevated privileges (as Admin), otherwise the self-host will not be allowed to open a port.
Make sure no other application is running on port 8080 already
Upvotes: 1