2013-01-13 31 views
9

我想自託管Windows窗體應用程序內的Web API服務使用下面自託管的Web API服務爲Windows窗體

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

代碼當我嘗試

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

我收到NullReferenceException at System.Web.Http.SelfHost.HttpSelfHostServer.ProcessRequestContext(ChannelContext channelContext,RequestContext requestContext)

有人知道發生了什麼?是否可以在Win Forms應用程序中自行託管?

+0

你設法解決這個問題? – Osi

回答

1
  1. 你需要(如果你從調試器中運行的winform應用程序或VS)與提升的權限(以管理員)來運行的WinForms應用程序,否則將自主機將不會被允許開放的端口。

  2. 確保沒有其他應用程序端口8080上運行已經

8

的問題是HttpSelfHostServer對象丟失之前Application.Run(...),其中包含主要事件循環,讓您的程序運行。該using聲明可以確保處置方法被調用的對象,在這種情況下服務器,從而使其不能用於回答請求,導致的NullReferenceException你正在經歷。

要解決的異常,你的代碼應該是這樣的:

... 
using (HttpSelfHostServer server = new HttpSelfHostServer(config)) 
{ 
    server.OpenAsync().Wait(); 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new frmMainMenu()); 
} 
... 
相關問題