2014-09-05 4 views
11

मैं निनजेस के साथ ओविन स्वयं होस्टेड वेबएपीआई के साथ एक विंडोज सेवा बनाने की कोशिश कर रहा हूं। मुझे यह काम करने के लिए मिला लेकिन मुझे system.web का संदर्भ जोड़ना पड़ा, जो गलत लगता है।निनजे ओविनहोस्ट का उपयोग कर ओविन स्वयं होस्ट ऐप को system.web की आवश्यकता है?

प्रकार 'System.Web.Routing.RouteCollection' एक विधानसभा संदर्भित नहीं है में परिभाषित किया गया है: system.web के लिए एक संदर्भ के बिना मैं इन त्रुटियों को संकलन मिला है। आपको असेंबली 'सिस्टम.Web, संस्करण = 4.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a' का संदर्भ जोड़ना होगा।

टाइप 'System.Web.Routing.Route' को एक असेंबली में परिभाषित किया गया है जो संदर्भित नहीं है। आपको असेंबली 'System.Web, संस्करण = 4.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b03f5f7f11d50a3a' का संदर्भ जोड़ना होगा।

त्रुटियों दिखाया के बाद मैं इस लेख Setting up a OWIN WebApi application

मैं भी Ninject काम करने के लिए संस्करण 2.1.0 के लिए Microsoft.Owin विवश किया था के अनुसार Ninject गयी। सेवा स्टार्टअप के दौरान निनजेक ओविन 2.1.0 की तलाश में है। यदि आप माइक्रोसॉफ्ट पर नवीनतम हैं। ओविन यह 3.0 पर रोल करेगा।

तीन मुख्य NuGet पैकेज मैं उपयोग कर रहा हूँ कर रहे हैं:

Microsoft.AspNet.WebApi.OwinSelfHost

Ninject.Web.Common.OwinHost

Ninject.Web.WebApi.OwinHost

यहाँ मेरी सभी पैकेज (Microsoft.Owin पर विवश नोटिस)

0,123,516 है
<package id="Microsoft.AspNet.WebApi" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.Owin" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.OwinSelfHost" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.Owin" version="2.1.0" targetFramework="net45" allowedVersions="(,2.1]" /> 
    <package id="Microsoft.Owin.Host.HttpListener" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Hosting" version="2.0.2" targetFramework="net45" /> 
    <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" /> 
    <package id="Ninject" version="3.2.2.0" targetFramework="net45" /> 
    <package id="Ninject.Extensions.ContextPreservation" version="3.2.0.0" targetFramework="net45" /> 
    <package id="Ninject.Extensions.NamedScope" version="3.2.0.0" targetFramework="net45" /> 
    <package id="Ninject.Web.Common" version="3.2.2.0" targetFramework="net45" /> 
    <package id="Ninject.Web.Common.OwinHost" version="3.2.2.0" targetFramework="net45" /> 
    <package id="Ninject.Web.WebApi" version="3.2.1.0" targetFramework="net45" /> 
    <package id="Ninject.Web.WebApi.OwinHost" version="3.2.1.0" targetFramework="net45" /> 
    <package id="Owin" version="1.0" targetFramework="net45" /> 

यहाँ खिड़कियों सेवा के Program.cs लग रहा है

तरह
using Microsoft.Owin.Hosting; 
using Ninject; 
using Ninject.Web.Common.OwinHost; 
using Ninject.Web.WebApi.OwinHost; 
using Owin; 
using System.Reflection; 
using System.ServiceProcess; 
using System.Web.Http; 


namespace ServiceExample 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     static void Main() 
     { 
      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] 
      { 
       new Service1() 
      }; 


      using (WebApp.Start<Startup>("http://localhost:12345")) 
      { 
       ServiceBase.Run(ServicesToRun); 
      } 
     } 



     public class Startup 
     { 
      public void Configuration(IAppBuilder app) 
      { 
       ConfigureWebAPI(app); 

      } 

      private void ConfigureWebAPI(IAppBuilder app) 
      { 
       var config = new HttpConfiguration(); 
       config.Routes.MapHttpRoute(
        "DefaultApi", 
        "api/{controller}/{id}", 
        new {id = RouteParameter.Optional}); 

       app.UseNinjectMiddleware(CreateKernel).UseNinjectWebApi(config); 
      } 


      private static StandardKernel CreateKernel() 
      { 
       var kernel = new StandardKernel(); 
       kernel.Load(Assembly.GetExecutingAssembly()); 
       return kernel; 
      } 
     } 
    } 
} 

उत्तर

12

संदर्भों से System.Web.Http.WebHost.dll को निकालने का प्रयास करें।

references list with System.Web.Http.WebHost.dll


मैं एक ही समस्या थी जब मैं this great blog post

समस्या में वर्णित के रूप वर्ग पुस्तकालय और अलग मेजबान परियोजनाओं (एक कंसोल और अन्य IIS का उपयोग) के रूप में एक API परियोजना करना चाहते थे गया था कि जब मैं Install-Package Microsoft.AspNet.WebApi निष्पादित ASP.NET वेब एपीआई स्थापित करने के लिए यह भी संदर्भ System.Web.Http.WebHost.dll को जोड़ा गया और परिणाम packages.json था:

<packages> 
    <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net452" /> 
    <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" /> 
</packages> 

तो समाधान System.Web.Http.WebHost.dll का संदर्भ हटा दें और जब कुछ बहाल nuget करेंगे तो यह फिर से स्थापित नहीं होगा Microsoft.AspNet.WebApi और Microsoft.AspNet.WebApi.WebHostpackages.json से हटाने के लिए था/पुनः स्थापित:

<packages> 
    <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" /> 
    <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" /> 
    <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" /> 
</packages> 

और इस से मेरी packages.json है मजदूर वर्ग पुस्तकालय ASP.NET वेब एपीआई परियोजना:

<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" /> 
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" /> 
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net452" /> 
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net452" /> 
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" /> 
<package id="Owin" version="1.0" targetFramework="net452" /> 
+0

मुझे आपके द्वारा सूचीबद्ध किए गए कार्यों के अलावा, इन्हें विंडोज़ सेवा के रूप में (.NET 4.5.1) बनाने के लिए इन 3 की आवश्यकता है: "माइक्रोसॉफ्ट.एस्पनेट.एबएपीआई.ऑविनसेल्फहोस्ट" "माइक्रोसॉफ्ट.ऑविन.होस्ट.एचटीपी लिस्टनर " " माइक्रोसॉफ्ट.ऑविन.होस्टिंग " – HungryPipo

+0

निनजेक्ट (एनयूजीईटी पैकेजों में से एक) जोड़ना संदर्भ को जोड़ना प्रतीत होता है जो इसे तोड़ने लगता है! सरल समाधान उस संदर्भ को हटाना है !! –

+0

उपर्युक्त में जोड़ना: system.web को मैन्युअल रूप से संदर्भ जोड़ने से त्रुटि दूर हो जाती है और वर्तमान में System.Web.Http.WebHost के संदर्भ को हटाने के बजाय इस दृष्टिकोण के साथ जा रहा है (इस समय यह पूरी तरह स्पष्ट नहीं है संदर्भ अनावश्यक है)। –

4

मैं आप के रूप में एक ही समस्या के साथ भर में आया है, लेकिन usign Ninject OwinHost बिना, और वास्तव में मुझे लगता है कि समस्या के साथ नहीं है Ninject लेकिन रूटिंग।

config.Routes.MapHttpRoute(
    "DefaultApi", 
    "api/{controller}/{id}", 
    new { id = RouteParameter.Optional }); 

System.Web.Routing जो पर System.Web नाम स्थान (Check here) निहित है का उपयोग करता है:

समस्या इस कोड है।

तो, मुझे जो विकल्प मिला है वह विकल्प के साथ rooting का उपयोग कर रहा है। तो अगर आप इस से ऊपर कोड के स्थान पर कर सकते हैं: आप इसके साथ परिचित नहीं हैं

// Web API routes 
config.MapHttpAttributeRoutes(); 

, this tutorial की जाँच करें।

इस दृष्टिकोण का उपयोग करके आप अपनी परियोजना के सिस्टम.Web संदर्भ को हटा सकते हैं।

+1

शुरू में मैं था "app.UseWebApi (config)" तो "Routes.MapHttpRoute" भाग वहां था और इसे System.Web के बिना हल किया गया था। लेकिन Ninject, System.Web जोड़कर आवश्यक था। मुझे MapHttpAttributesRoutes() के साथ निर्भरता इंजेक्शन के लिए निनजेक्ट की आवश्यकता है, मैं निनजेक्ट कैसे शुरू करूं? – HungryPipo

+2

यह एक अच्छा, व्यावहारिक कामकाज है, लेकिन मैं थोड़ा उलझन में हूं क्योंकि 'config.Routes.MapHttpRoute' को कॉल करने के लिए 'System.Web'' के संदर्भ की आवश्यकता है। कॉल में शामिल किसी भी प्रकार ('IHttpRoute', 'HttpRouteCollection',' रूट पैरामीटर ') को उस असेंबली में घोषित नहीं किया गया है, वे सभी' System.Web.Http.Routing' से हैं। और 'System.Web.Http 'असेंबली' HttpCollection' युक्त 'System.Web' पर निर्भर नहीं है। क्या आप समझा सकते हैं कि निर्भरता कैसे उत्पन्न हुई है? – Peter

संबंधित मुद्दे