2015-01-14 46 views
5

我已经在SO及以后寻找答案,但迄今为止我还没有看到任何答案。Asp.Net vNext现有应用程序内的自我托管

我们正在考虑向现有的Windows服务/ WPF EXE添加一些报告。理想情况下,我们会自行托管一个vNext应用程序,以便公开我们的应用程序可以使用的报告终端。这在OWIN和ASP.NET 4中是可以实现的。

这对vNext来说甚至可能吗?

我试过了几个样本等,K运行时似乎显然是一个不同的CLR运行时。建立等等都是相当不同的......所以我想至少它必须是一个完全独立的过程......或者我在吠叫错误的树?

特别是我们似乎需要调用K运行时(k web或elk pack'ed .cmd),这看起来很直观,因为我已经在我正在运行的一个进程中(主要的exe /服务) 。

编辑:我想知道如果答案是NoWin,引用和提供OWIN容器。但我很努力地想看看这是不是最好的方法...

+0

我在这里谈论的无知,但为什么在这里显然是Windows应用程序的一个Web应用程序?如果不需要Web服务器来处理请求,并且每台机器都部署在每台机器上,为什么还要解决这个难题 – user3036342

+0

很难知道该说些什么。主持一个允许监视或报告的API非常方便。这是我以前用过的东西,当然不是新的或非常疯狂的。 一些工具/应用程序可以实现这一点 - 通过中央应用程序收集,分析统计信息/日志,并通过独立应用程序与专用应用程序提供馈送/报告。 我会给你它超出了通常的部署方案,并且由于运行时的混合(CLR和现在的K),这是可以理解的,为什么现在不是一个选项...... – penderi

回答

0

好吧我在jabbr.net上花了一些时间,并从一个很棒的@dfowl中获得了一些帮助,天)。

@dfowl:那种情况下是非常死

我take-作为我们的Windows服务/ WPF下的CLR运行和vNext下的CLR运行它们是不同的运行时间。

There is一种方式来做到这一点,基于旧版本的K运行时间,它是呃,毛茸茸的。文件中可能的,但从来没有东西,你会投入生产:

Alxandr's CLR Bootstrap for K runtime

2

这里一个可能的解决方案:How to Run DNX Applications in a Windows ServiceHow to Host ASP.NET in a Windows Service感谢埃雷兹Testiler。

基本想法是添加下列引用:

  • “Microsoft.AspNet.Hosting”: “1.0.0-β7的” - 引导了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包

然后以编程方式配置和启动服务器和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(); 
} 

这似乎是一个相当不错的解决方案给我。

+0

这是.NET Core而不是.NET Framework – superfly71

相关问题