2015-01-14 11 views
5

Ho cercato la risposta a questo, in SO e oltre, ma finora non ho visto nessuna risposta.Asp.Net vNext self-hosting all'interno dell'applicazione esistente

Stiamo cercando di aggiungere alcuni rapporti a un EXE Windows Services/WPF esistente. Idealmente organizzeremmo una piccola applicazione vNext che esporrebbe gli endpoint di segnalazione che la nostra app può utilizzare. Ciò è stato possibile con OWIN e ASP.NET 4.

Ciò è possibile anche con vNext?

Ho provato alcuni esempi ecc. E il runtime di K sembra, chiaramente, essere un runtime diverso dal CLR. Costruire ecc. È tutto piuttosto diverso ... quindi suppongo che perlomeno debba essere un processo completamente separato ... o sto abbaiando dall'albero sbagliato?

In particolare sembra che sia necessario invocare il runtime di K (k web o elsed ak pack'ed .cmd) che sembra intuitivo come coutner poiché sono già all'interno di un processo che sto eseguendo (il principale exe/servizio) .

EDIT: Mi chiedo se la risposta è NoWin, referenziato e fornendo il contenitore OWIN. Non riesco a capire se questo sia l'approccio migliore ...

+0

Qui sto parlando di ignoranza, ma perché calzare una app Web in quella che è chiaramente un'app per Windows qui? se non è necessario alcun server Web per gestire le richieste e ciascuna viene distribuita per macchina, perché preoccuparsi di questo enigma – user3036342

+0

Difficile sapere cosa dire lol. È piuttosto comodo ospitare un'API che consente il monitoraggio o la segnalazione.È qualcosa che ho usato in passato e non è certamente nuovo o molto pazzo. Alcuni strumenti/app lo fanno - con un'app centralizzata che raccoglie, analizza statistiche/log, diciamo e un'app separata con un'app dedicata per fornire feed/reporting. Ti garantisco che è al di là dei normali scenari di distribuzione e grazie al mix di runtime (CLR e ora K) è comprensibile perché questa ora non è un'opzione .... – penderi

risposta

0

Ok ho passato un po 'di tempo su jabbr.net e ho avuto un po' di aiuto dal fantastico @dfowl e un utile, anche se piuttosto brusco, dev (quelli erano i giorni).

@dfowl: questo scenario è praticamente morto

mio take- come il nostro servizio Windows/WPF gira sotto CLR e vNext gira sotto CLR sono diversi tempi di esecuzione.

è un modo per farlo, basato su una versione precedente del runtime K ed è così, peloso. File in possibile, ma non è mai qualcosa che ci si mette in produzione:

Alxandr's CLR Bootstrap for K runtime

2

Ecco una possibile soluzione: How to Run DNX Applications in a Windows Service e How to Host ASP.NET in a Windows Service grazie a Erez Testiler.

In sostanza l'idea è quella di aggiungere i seguenti riferimenti:

  • "Microsoft.AspNet.Hosting": "1.0.0-beta7" - Bootstraps il server web
  • "Microsoft.AspNet.Server. Kestrel ": "1.0.0-beta7" - implementazione del server Web
  • "Microsoft.AspNet.StaticFiles": "1.0.0-beta7" - Host file statici
  • "Microsoft.AspNet.Mvc":" 6.0. 0-beta7 "- Include tutti i pacchetti MVC

E poi a livello di codice configurare e avviare il server e ASP.NET:

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

Sembra essere abbastanza buona soluzione per me.

+0

Questo è .NET Core non .NET Framework – superfly71