gpt4 book ai didi

c# - Asp.Net vNext 在现有应用程序中自托管

转载 作者:太空狗 更新时间:2023-10-29 23:38:28 24 4
gpt4 key购买 nike

我已经在 SO 及以后寻找这个问题的答案,但到目前为止我还没有看到任何答案。

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

vNext 甚至可以做到这一点吗?

我已经尝试了一些示例等,很明显,K 运行时似乎是与 CLR 不同的运行时。构建等也完全不同......所以我想至少它必须是一个完全独立的过程......或者我是不是找错了树?

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

编辑:我想知道答案是否是 NoWin ,引用并提供 OWIN 容器。但我正在努力看看这是否是最好的方法......

最佳答案

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

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

  • "Microsoft.AspNet.Hosting": "1.0.0-beta7"– 引导网络服务器
  • "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();
}

这对我来说似乎是一个很好的解决方案。

关于c# - Asp.Net vNext 在现有应用程序中自托管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27939465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com