簡體   English   中英

Asp.Net vNext在現有應用程序中自托管

[英]Asp.Net vNext self-hosting within existing application

我已經在這個問題上找到了答案,但是到目前為止我還沒有看到任何答案。

我們正在考慮向現有的Windows Services / WPF EXE添加一些報告。 理想情況下,我們會自行托管一個小的vNext應用程序,該應用程序將公開我們的應用程序可以使用的報告端點。 這可以通過OWIN和ASP.NET 4實現。

vNext甚至可以實現這一點嗎?

我已經嘗試了一些樣本等,而K Runtime似乎顯然是與CLR不同的運行時。 構建等也是完全不同的...所以我想至少它必須是一個完全獨立的過程....或者我是在咆哮錯誤的樹?

特別是看起來我們需要調用K運行時(k web或elsed ak pack'ed .cmd),因為我已經在我正在運行的進程(主要的exe / service)中,這似乎是coutner直觀的。

編輯:我想知道答案是NoWin ,引用並提供OWIN容器。 我正在努力想看看這是不是最好的方法......

這里有一個可能的解決方案: 如何在Windows服務中運行DNX應用程序以及如何 在Windows服務 中托管ASP.NET,這要歸功於Erez Testiler。

基本上這個想法是添加以下引用:

  • “Microsoft.AspNet.Hosting”:“1.0.0-beta7” - 引導Web服務器
  • “Microsoft.AspNet.Server.Kestrel”:“1.0.0-beta7” - Web服務器實現
  • “Microsoft.AspNet.StaticFiles”:“1.0.0-beta7” - 托管靜態文件
  • “Microsoft.AspNet.Mvc”:“6.0.0-beta7” - 包括所有MVC包

然后以編程方式配置並啟動Server和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();
}

對我來說這似乎是一個很好的解決方案。

好的,我在jabbr.net上花了一些時間,並從一個很棒的@dfowl得到了一些幫助,並且有一個很有幫助的,如果相當簡陋的年輕開發者(那些日子)。

@dfowl:那個場景已經死了

我認為我們的Windows服務/ WPF在CLR下運行,而vNext在CLR下運行,它們是不同的運行時。

一個辦法做到這一點,基於舊版本的K個運行時,它的呃,有毛。 文件可能,但從來沒有你投入生產的東西:

用於K運行時的Alxandr的CLR Bootstrap

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM