2013-01-13 1 views
9

내가자체 웹 호스팅 API 서비스는 내가받을 내가</p> <pre><code>http://localhost:8080/api/*(some-controller)* </code></pre> <p>을하려고하면

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

아래의 코드를 사용하여 Windows Forms의 응용 프로그램 내에서 웹 API 서비스를 호스트 자체에 노력하고 양식 System.Web.Http.SelfHost.HttpSelfHostServer.ProcessRequestContext의 는 NullReferenceException (channelContext channelContext, requestContext requestContext)

,174,

누군가 무슨 일이 일어나고 있는지 알고 있습니까? Win Forms 응용 프로그램 내에서 자체 호스트가 가능합니까?

+0

당신은 문제를 해결하기 위해 관리나요? – Osi

답변

1
  1. 당신은 그렇지 않으면 자기 호스트 포트를 열도록 허용되지 않습니다 (디버거에서의 WinForm 응용 프로그램을 실행하는 경우 또는 VS) (관리자)를 상승 된 권한으로 윈폼 응용 프로그램을 실행해야합니다.

  2. 이미

8

문제는 HttpSelfHostServer 객체가 분실 것입니다 다른 응용 프로그램이 포트 8080에서 실행되지 않습니다 있는지 확인 만 포함 Application.Run (...) 전 프로그램을 계속 실행하는 메인 이벤트 루프. using 문은 폐기 방법 때문에 발생한 NullReferenceException이 결과, 요청에 응답하기에 사용할 수없는 만들기, 서버이 경우, 객체에 대해 호출됩니다 있는지 확인합니다.

예외를 해결하려면 코드는 다음과 같이한다 :

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