Self hosting Web Api service into Windows Forms
Asked Answered
U

2

12

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?

Undefined answered 13/1, 2013 at 15:31 Comment(1)
Did you manage to solve the problem?Tuchun
Y
12

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());
}
...
Yurikoyursa answered 5/4, 2013 at 7:52 Comment(1)
you save me from Scratching my head BIIIIIIIIIIIIIIIIG Thanks ...Intractable
S
1
  1. 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.

  2. Make sure no other application is running on port 8080 already

Saltatorial answered 13/1, 2013 at 17:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.