معرفی
یک برنامه ASP.NET Core را می توان با استفاده از روش های مختلف از جمله سرورهای IIS و HTTP.sys میزبانی کرد. این مقاله در مورد میزبانی برنامه های ASP.NET Core به عنوان یک سرویس ویندوز است. ویژگی Windows Service فقط در پلتفرم ویندوز در دسترس است. این یکی از راههای میزبانی برنامههای ASP.NET Core بر روی پلتفرم ویندوز بدون استفاده از IIS است.
اجرای میزبانی یک برنامه ASP.NET Core به عنوان خدمات ویندوز مربوط به NET Core نیست. هنگامی که یک برنامه به عنوان سرویس ویندوز میزبانی می شود، اگر وضعیت سرویس شروع/توقف باشد، می تواند به طور خودکار شروع/توقف کند.
هنگامی که برنامه های ASP.NET Core به عنوان یک سرویس ویندوز میزبانی می کنند، برنامه باید روی دات نت فریم ورک اجرا شود، بنابراین باید مقادیر مناسبی را برای TargetFramework در فایل csproj مشخص کنیم. برای نشان دادن مثال، من برنامه خود را بر روی .NET Framework 4.6.1 اجرا کرده ام.
- <PropertyGroup>
- <TargetFramework>net461</TargetFramework>
- </PropertyGroup>
اولین قدم نصب بسته Microsoft.AspNetCore.Hosting.WindowsServices از nuGet است. این بسته را می توان با استفاده از NuGet Package Manager یا با استفاده از NET Core CLI نصب کرد.
با استفاده از Nuget Package Manager
- PM > Install-Package Microsoft.AspNetCore.Hosting.WindowsServices
استفاده از NET Core CLI
- > dotnet add package Microsoft.AspNetCore.Hosting.WindowsServices
این بسته شامل متد افزونه با نام "RunAsService" برای IWebHost است. این روش افزونه برنامه وب مشخص شده را به عنوان سرویس ویندوز اجرا می کند و پورت تا زمانی که سرویس متوقف نشود مسدود می شود. در اینجا، میخواهیم برنامهمان را بهعنوان یک سرویس اجرا کنیم، بنابراین باید متد IWebHost.RunAsService() را به جای IWebHost.Run() در متد اصلی فایل program.cs فراخوانی کنیم. همچنین باید مسیر دایرکتوری ریشه محتوا را برای انتشار مکان مشخص کنیم.
Program.cs
- using Microsoft.AspNetCore;
- using Microsoft.AspNetCore.Hosting;
- using Microsoft.AspNetCore.Hosting.WindowsServices;
- using System.Diagnostics;
- using System.IO;
- namespace TestApp
- {
- public class Program
- {
- 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();
- }
- }
- }
مرحله بعدی انتشار این اپلیکیشن و ثبت نام به عنوان سرویس ویندوز است. برای ثبت یک سرویس ویندوز، یک پوسته فرمان با امتیازات مدیریتی باز کنید و از ابزار خط فرمان sc.exe برای ایجاد و راه اندازی یک سرویس استفاده کنید. در دستور زیر binPath یک فایل اجرایی از برنامه است.
- >sc create TestService binPath="D:\PubTest\TestApp.exe"
- >sc start TestService
وقتی دستور بالا با موفقیت اجرا شد و سرویس ویندوز شروع به کار کرد، میتوانیم همان مسیری را که بدون سرویس اجرا میکنیم مرور کنیم (یعنی آدرس پیشفرض http://localhost:5000 است).
![](http://pezhvak24.ir/dl/10kcor/cscd/article/host-an-asp-net-core-application-as-a-windows-service/Images/2.png)
راهی برای میزبانی برنامه خارج از یک سرویس ارائه دهید
هنگام اجرا و میزبانی برنامه به عنوان یک سرویس ویندوز، اشکال زدایی بسیار دشوار است. بنابراین می توانیم یک شرط اضافه کنیم تا برنامه به عنوان سرویس اجرا نشود.