是否可以在没有IIS(非Web API)的情况下自托管ASP.NET核心应用程序?

sel*_*lva 32 asp.net-core

我有一个完整的ASP.NET MVC应用程序(.NET Core,ASP.NET MVC 6),它在Visual Studio(使用IISExpress)中运行良好.

我现在想要一个控制台应用程序,它接受MVC应用程序并托管它(自托管).

Sha*_*tin 31

是否可以在没有IIS(非Web API)的情况下自行托管MVC 6应用程序?

是.实际上,所有ASP.NET Core应用程序都是自托管的.即使在生产中,IIS(或Nginx)也是自托管应用程序的反向代理.

以下是您可以尝试的方法.

首先,从https://www.microsoft.com/net/core下载并安装.NET Core

其次,创建一个MVC 6项目.例如,从ASP.NET GitHub存储库克隆样本.

public class Program
{
    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .AddEnvironmentVariables(prefix: "ASPNETCORE_")
            .Build();

        var host = new WebHostBuilder()
            .UseConfiguration(config)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者使用Yeoman生成ASP.NET MVC 6站点.

public class Program
{
    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .AddEnvironmentVariables(prefix: "ASPNETCORE_")
            .Build();

        var host = new WebHostBuilder()
            .UseConfiguration(config)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}
Run Code Online (Sandbox Code Playgroud)

第三,恢复并运行项目.

public class Program
{
    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .AddEnvironmentVariables(prefix: "ASPNETCORE_")
            .Build();

        var host = new WebHostBuilder()
            .UseConfiguration(config)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,在Web浏览器中导航到localhost:5000.MVC 6应用程序是自托管的.

看看生成的Program.cs类,你可以看到自托管.这IISIntegration是可选的 - 只有在您想要与IIS集成时才需要它.

public class Program
{
    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .AddEnvironmentVariables(prefix: "ASPNETCORE_")
            .Build();

        var host = new WebHostBuilder()
            .UseConfiguration(config)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 8

是的,ASP.NET Core支持.NET的开放Web界面(OWIN),您可以通过两个选项来托管Asp.net核心Web应用程序:

  1. IIS

  2. 自托管

但是,自托管的Web应用程序无法在系统启动,重启或出现故障时自动重启。

  • 关于不自动重启的重点。 (5认同)
  • 如果自托管 Web 应用程序是 Windows 服务,那么它应该能够在系统启动时重新启动? (4认同)