2015-01-14 5 views
5

Ich habe für die Antwort auf diese in SO und darüber hinaus gejagt, aber ich habe bis jetzt keine Antworten gesehen.Asp.Net vNext selbst-hosting innerhalb der bestehenden Anwendung

Wir suchen nach einer vorhandenen Windows Services/WPF-EXE einige Berichterstattung hinzufügen. Idealerweise würden wir selbst eine kleine vNext-Anwendung hosten, die die Reporting-Endpunkte unserer App verfügbar machen würde. Dies war mit OWIN und ASP.NET 4 möglich.

Ist das mit vNext überhaupt möglich?

Ich habe ein paar Proben usw. ausprobiert und die K Runtime scheint eindeutig eine andere Laufzeit zu sein als die CLR. Bauen etc. ist auch alles ziemlich anders ... also denke ich, dass es zumindest ein völlig separater Prozess sein müsste ... oder belle ich den falschen Baum an?

Insbesondere scheint es, wir müssen die K-Laufzeit (k Web oder elsed ak Pack'ed .cmd) aufrufen, die Coutner intuitiv scheint, wie ich bereits in einem Prozess bin ich (die Haupt-Exe/Service) laufen .

EDIT: Ich frage mich, ob die Antwort NoWin ist, referenziert und Bereitstellung der OWIN-Container. Aber ich kämpfe, um zu sehen, ob das der beste Ansatz ist ...

+0

Ich spreche hier aus Ignoranz, aber warum Shoahorn eine Web-App in was ist eindeutig eine Windows-App hier? Wenn kein Web-Server benötigt wird, um Anfragen zu bearbeiten, und jeder pro Maschine bereitgestellt wird, warum sich mit diesem Rätsel beschäftigen – user3036342

+0

Schwer zu wissen, was ich sagen soll lol. Es ist sehr praktisch, eine API zu hosten, die Überwachung oder Berichterstellung ermöglicht.Es ist etwas, das ich in der Vergangenheit benutzt habe und es ist sicherlich nicht neu oder sehr verrückt. Ein paar Tools/Apps tun dies - mit einer zentralen App sammeln, analysieren Statistiken/Logs, sagen und eine separate App mit einer speziellen App, um Feeds/Reporting zur Verfügung zu stellen. Ich gebe Ihnen, es ist jenseits der üblichen Bereitstellung Szenarien und aufgrund der Mischung von Laufzeiten (CLR und jetzt K) ist es verständlich, warum dies jetzt keine Option ist .... – penderi

Antwort

0

Ok, ich verbrachte einige Zeit auf jabbr.net und hatte etwas Hilfe von dem tollen @dfowl und einem hilfreichen, wenn auch eher knappen jüngeren Entwickler (das waren die Tage).

@dfowl: dieses Szenario ist ziemlich tot

Mein Nahme als unser Windows Service/WPF unter CLR läuft und vNext läuft unter CLR sie unterschiedliche Laufzeiten sind.

Dort ist ein Weg, es zu tun, basierend auf einer älteren Version der K-Laufzeit und es ist äh, haarig. Datei in möglich, aber nie etwas, das Sie würde setzen in der Produktion:

Alxandr's CLR Bootstrap for K runtime

2

Hier eine mögliche Lösung: How to Run DNX Applications in a Windows Service und How to Host ASP.NET in a Windows Service dank Erez Testiler.

Grundsätzlich ist die Idee, die folgenden Verweise hinzu:

  • "Microsoft.AspNet.Hosting": "1.0.0-beta7" - Bootstraps der Webserver
  • „Microsoft.AspNet.Server. Kestrel ": "1.0.0-beta7" - Web-Server-Implementierung
  • "Microsoft.AspNet.StaticFiles": "1.0.0-beta7" - Hosts statische Dateien
  • "Microsoft.AspNet.Mvc":" 6.0. 0-beta7 "- Enthält alle MVC-Pakete

Und dann programmatisch konfigurieren und den Server und ASP.NET starten:

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Hosting; 
using Microsoft.AspNet.Hosting.Internal; 
using Microsoft.Framework.Configuration; 
using Microsoft.Framework.Configuration.Memory; 
using Microsoft.Framework.DependencyInjection; 
using System; 
using System.Diagnostics; 
using System.Linq; 
using System.ServiceProcess; 

.... 

private readonly IServiceProvider _serviceProvider; 
private IHostingEngine _hostingEngine; 
private IDisposable _shutdownServerDisposable; 

public Program(IServiceProvider serviceProvider) 
{ 
    _serviceProvider = serviceProvider; 
} 

protected override void OnStart(string[] args) 
{ 
    var configSource = new MemoryConfigurationSource(); 
    configSource.Add("server.urls", "http://localhost:5000"); 

    var config = new ConfigurationBuilder(configSource).Build(); 
    var builder = new WebHostBuilder(_serviceProvider, config); 
    builder.UseServer("Microsoft.AspNet.Server.Kestrel"); 
    builder.UseServices(services => services.AddMvc()); 
    builder.UseStartup(appBuilder => 
    { 
     appBuilder.UseDefaultFiles(); 
     appBuilder.UseStaticFiles(); 
     appBuilder.UseMvc(); 
    }); 

    _hostingEngine = builder.Build(); 
    _shutdownServerDisposable = _hostingEngine.Start(); 
} 

Es scheint mir eine ganz gute Lösung zu sein.

+0

Dies ist .NET Core nicht .NET Framework – superfly71

Verwandte Themen