2013-01-13 15 views
9

Sto cercando di sé ospitare un servizio Web Api all'interno di un'applicazione Windows Form usando il codice seguenteself service Api di hosting Web in Windows Form

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()); 
     } 
    } 
} 

Quando provo

http://localhost:8080/api/*(some-controller)* 

ricevo un NullReferenceException a System.Web.Http.SelfHost.HttpSelfHostServer.ProcessRequestContext (ChannelContext channelContext, RequestContext requestContext)

Qualcuno sa cosa sta succedendo? È possibile ospitare autonomamente all'interno di un'app Win Forms?

+0

siete riusciti a risolvere il problema? – Osi

risposta

1
  1. È necessario eseguire l'applicazione WinForms (o VS se si esegue l'applicazione WinForm dal debugger) con privilegi elevati (come amministratore), altrimenti l'auto-host non sarà consentito di aprire una porta.

  2. Assicurarsi che nessun'altra applicazione è in esecuzione sulla porta 8080 già

8

Il problema è che l'oggetto HttpSelfHostServer si perde poco prima Application.Run (...), che contiene la ciclo di eventi principale che mantiene in esecuzione il programma. La dichiarazione using fa in modo che Dispose metodo viene chiamato per l'oggetto, in questo caso server di, rendendo così disponibile per rispondere alle richieste, con conseguente NullReferenceException si verificano.

Per fissare l'eccezione, il codice dovrebbe essere simile a questo:

... 
using (HttpSelfHostServer server = new HttpSelfHostServer(config)) 
{ 
    server.OpenAsync().Wait(); 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new frmMainMenu()); 
} 
... 
Problemi correlati