2013-01-13 8 views
9

मैं नीचेस्व होस्टिंग वेब एपीआई सेवा फॉर्म्स

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)* 

कोशिश मैं एक प्राप्त System.Web.Http.SelfHost.HttpSelfHostServer.ProcessRequestContext पर NullReferenceException (ChannelContext channelContext, RequestContext requestContext)

किसी को पता है कि क्या हो रहा है? क्या विन फॉर्म ऐप के अंदर स्वयं होस्ट करना संभव है?

+0

आप समस्या को हल करने का प्रबंधन किया था? – Osi

उत्तर

1
  1. आप (व्यवस्थापक के रूप में) ऊंचा विशेषाधिकारों के साथ (आप डीबगर से WinForm अनुप्रयोग चलाने यदि या वी.एस.) 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()); 
} 
...