前言:
眼前看官们对“aspnetcore运行过程”都比较关心,你们都需要剖析一些“aspnetcore运行过程”的相关文章。那么小编也在网摘上搜集了一些有关“aspnetcore运行过程””的相关资讯,希望你们能喜欢,我们快快来学习一下吧!我们现在可以以最小的努力将ASP.NET Core应用程序作为Windows服务运行。这篇博客文章介绍了这个过程是如何完成的。
ASP.NET Core 2.1为Windows服务引入了一个新的应用程序主机。我们现在可以以最小的努力将ASP.NET Core应用程序作为Windows服务运行。这篇博客文章介绍了它是如何完成的以及如何在ASP.NET Core上构建和运行Windows服务,而不需要肮脏的黑客攻击。
创建默认的Web应用程序
我们从新的默认ASP.NET Core 2.1 Web应用程序开始。
我没有配置HTTPS,因为这是一个示例应用程序,它没有任何重要意义。
默认情况下,这个 Program类看起来像这样。
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
现在我们有了默认的应用程序,现在是时候关注Windows服务了。
将ASP.NET核心应用程序作为Windows服务运行
将应用程序作为Windows服务运行需要一些努力,然后才能打开浏览器并在服务中查看它。首先,我们必须为我们的应用程序指定一个运行时,因为ASP.NET Core还支持Windows服务不运行的操作系统和体系结构。为此,我们必须修改项目文件。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
</Project>
接下来,添加对NuGet包Microsoft.AspNetCore.Hosting.WindowsServices的引用。该软件包具有运行ASP.NET Core应用程序作为Windows服务所需的所有功能。
NB!对我而言,Microsoft.AspNetCore.Hosting.WindowsServices的最新版本2.1.1与ASP.NET Core 2.1.0发生冲突,我改为使用2.1.0版。
我们也必须修改Main() 这个Program 类的 方法 。以最简单的形式,该 Main() 方法看起来像这样。
public static void Main(string[] args)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
var pathToContentRoot = Path.GetDirectoryName(pathToExe);
var host = WebHost.CreateDefaultBuilder(args)
.UseContentRoot(pathToContentRoot)
.UseStartup<Startup>()
.Build();
host.RunAsService();
}
我们现在要做的就是发布我们的应用程序,将其注册为Windows服务并启动服务。
将应用程序作为服务运行或在控制台上运行
那些曾经构建过Windows服务的人非常清楚,在构建服务之后,必须部署新版本的服务,附加一个调试器等,服务的调试可能会成为特定解剖区域的痛苦。有简单的解决方法 - 我们将Windows服务作为一个控制台应用程序来运行,它很容易在Visual Studio的调试器上运行。
我们也可以将相同的技巧应用于作为Windows服务运行的ASP.NET Core应用程序。
public static void Main(string[] args)
{
var isService = !(Debugger.IsAttached || args.Contains("--console"));
var pathToContentRoot = Directory.GetCurrentDirectory();
var webHostArgs = args.Where(arg => arg != "--console").ToArray();
if (isService)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
pathToContentRoot = Path.GetDirectoryName(pathToExe);
}
var host = WebHost.CreateDefaultBuilder(webHostArgs)
.UseContentRoot(pathToContentRoot)
.UseStartup<Startup>()
.Build();
if (isService)
{
host.RunAsService();
}
else
{
host.Run();
}
}
显示的代码可能看起来有点棘手。这里是我的解释:
要从Visual Studio在控制台上运行应用程序,我们控制是否连接了调试器。如果我们想在Visual Studio之外将应用程序作为控制台应用程序运行,那么我们可以使用 -console参数。当应用程序作为Web服务器下的Web应用程序运行时,我们必须使用当前目录作为内容根目录。但是当应用程序作为服务运行时,我们需要一个可执行路径作为内容根。我们删除 -console 参数,因为ASP.NET Core期望所有参数都是名称 - 值对。
现在尝试从Visual Studio运行应用程序。它从一个普通的Web应用程序开始。
使应用程序作为Windows服务运行
为了使应用程序作为Windows服务运行,我们需要一些额外的步骤。
将应用程序发布到某个文件夹。以管理权限打开命令行。使用t命令将应用程序注册为Windows服务(“binPath =”为必填项后的空格) 。开始服务:sc start AspNetWindowsService。服务启动后,打开浏览器并导航到http:// localhost:5000以查看运行的Web应用程序。
在发布新版本的服务之前,必须停止当前运行的实例。为此,我们可以使用该命令 sc stop AspNetWindowsService。要删除该服务,请运行以下命令: sc delete AspNetWindowsService。
结束
使用新的Microsoft.AspNetCore.Hosting.WindowsServices NuGet软件包,可以轻松地将ASP.NET Core应用程序作为Windows服务运行。我们必须稍微修改一下项目文件并制作应用程序的 Main() 方法,以便了解应用程序作为服务或控制台应用程序运行。使用这个技巧,我们能够在Visual Studio上构建一个Web应用程序,并将其作为典型的Web应用程序运行。将Web应用程序作为Windows服务运行的负担很小。
标签: #aspnetcore运行过程