Ich versuche, einen Windows-Dienst mit OWIN selbst gehosteten WebAPI mit Ninject zu erstellen. Ich habe es zum Laufen gebracht, aber ich musste einen Verweis auf system.web hinzufügen, was falsch scheint. Ohne Bezugnahme auf system.web bekam ich diese Fehler kompilieren:Sollte OWIN Self-Host-App mit Ninject OWINHost System.web verwenden?
Der Typ ‚System.Web.Routing.RouteCollection‘ wird in einer Baugruppe definiert, die nicht verwiesen wird. Sie müssen einen Verweis auf die Assembly 'System.Web, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' hinzufügen. Der Typ 'System.Web.Routing.Route' wird in einer Baugruppe definiert, die nicht referenziert ist. Sie müssen einen Verweis auf Assembly 'System.Web, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' hinzufügen.
Die Fehler auftauchten, nachdem ich Ninject nach diesem Artikel hinzugefügt Setting up a OWIN WebApi application
Ich musste auch die Microsoft.Owin bis 2.1.0 Version beschränken für Ninject zu arbeiten. Während des Service Startup sucht Ninject nach Owin 2.1.0. Wenn Sie die neueste Version von Microsoft.Owin erhalten, wird es auf 3.0 hochgestuft.
Die drei Haupt NuGet Pakete Ich verwende sind:
Microsoft.AspNet.WebApi.OwinSelfHost
Ninject.Web.Common.OwinHost
Ninject.Web.WebApi.OwinHost
Hier sind alle meine Pakete (man beachte die constrain auf Microsoft.Owin)
<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" />
Hier ist, was die Program.cs des Windows-Dienstes wie
siehtusing 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;
}
}
}
}
Ich brauchte diese 3, zusätzlich zu denen, die Sie aufgelistet, um meine Arbeit (.NET 4.5.1) als Windows-Dienst: "Microsoft.AspNet.WebApi.OwinSelfHost" "Microsoft.Owin.Host.HttpListener " " Microsoft.Owin.Hosting " – HungryPipo
Das Hinzufügen von Ninject (eines der NUGet-Pakete) schien die Referenz hinzuzufügen, die das zu brechen scheint! Eine einfache Lösung ist, diese Referenz zu entfernen !! –
Hinzufügen zu obigem: das manuelle Hinzufügen eines Verweises auf system.web scheint auch den Fehler verschwinden zu lassen und geht jetzt mit diesem Ansatz, anstatt den Verweis auf System.Web.Http.WebHost zu entfernen (im Moment ist es nicht ganz klar, ob das so ist) Referenz ist redundant). –