. NET العمال الأساسية مثل خدمات ويندوز

في .NET Core 3.0 ، نعرض نوعًا جديدًا من قالب التطبيق يسمى Worker Service. يهدف هذا القالب إلى منحك نقطة بداية لكتابة خدمات طويلة المدى في .NET Core. في هذا الاستعراض ، سنقوم بإنشاء عامل وتشغيله كخدمة Windows.



خلق عامل


معاينة ملاحظة: في إصدارات المعاينة الخاصة بنا ، يكون قالب العامل في نفس قائمة قوالب الويب. هذا سوف يتغير في إصدار مستقبلي. نعتزم وضع قالب "خدمة العمال" داخل معالج إنشاء مشروع جديد مباشرةً.


إنشاء عامل في Visual Studio


صورة


صورة


صورة


إنشاء عامل في سطر الأوامر


تشغيل dotnet new worker


صورة


تشغيل كخدمة ويندوز


من أجل التشغيل كخدمة Windows ، نحتاج إلى عاملنا للاستماع لبدء وإيقاف الإشارات من ServiceBase ، نوع .NET الذي يعرض أنظمة Windows Service إلى تطبيقات .NET. للقيام بذلك ، نريد:


إضافة حزمة Microsoft.Extensions.Hosting.WindowsServices NuGet


صورة


أضف استدعاء UseServiceBaseLifetime إلى HostBuilder في Program.cs


 public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceBaseLifetime() .ConfigureServices(services => { services.AddHostedService<Worker>(); }); } 

هذه الطريقة تفعل عدة أشياء. أولاً ، يتحقق ما إذا كان التطبيق يعمل بالفعل كخدمة من خدمات Windows أم لا ، وإذا لم يكن كذلك ، فإنه لا يعمل على جعل هذه الطريقة آمنة ليتم الاتصال بها عند تشغيله محليًا أو عند تشغيله كخدمة Windows. لا تحتاج إلى إضافة جمل حماية إليه ، ويمكنك فقط تشغيل التطبيق بشكل طبيعي عندما لا يتم تثبيت كخدمة Windows.


ثانياً ، يقوم بتكوين المضيف الخاص بك لاستخدام ServiceBaseLifetime . يعمل ServiceBaseLifetime مع ServiceBase للمساعدة في التحكم في عمر التطبيق الخاص بك عند تشغيله كخدمة Windows. هذا يتجاوز ConsoleLifetime الافتراضي الذي يعالج إشارات مثل CTL + C.


تثبيت العامل


بمجرد قيام ServiceBaseLifetime باستخدام ServiceBaseLifetime نحتاج بعد ذلك إلى تثبيته:


أولا ، يتيح نشر التطبيق. سنقوم بتثبيت خدمة Windows في مكانها ، مما يعني أنه سيتم قفل exe عند تشغيل الخدمة. تعد خطوة النشر طريقة رائعة للتأكد من أن جميع الملفات التي أحتاج إليها لتشغيل الخدمة في مكان واحد وجاهزة للتثبيت.


 dotnet publish -oc:\code\workerpub 

ثم يمكننا استخدام الأداة المساعدة sc في موجه أوامر المشرف


 sc create workertest binPath=c:\code\workerpub\WorkerTest.exe 

على سبيل المثال:


صورة


ملاحظة الأمان: يشتمل هذا الأمر على تشغيل الخدمة كنظام محلي ، وهو أمر لا تريد القيام به عمومًا . بدلاً من ذلك ، يجب عليك إنشاء حساب خدمة وتشغيل خدمة windows كهذا الحساب. لن نتحدث عن ذلك هنا ، ولكن هناك بعض الوثائق حول مستندات ASP.NET التي تتحدث عنها هنا: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/windows- الخدمة؟ عرض = aspnetcore-2.2


تسجيل


يحتوي نظام التسجيل على موفر "سجل الأحداث" يمكنه إرسال رسالة السجل مباشرة إلى سجل أحداث Windows. لتسجيل الدخول إلى سجل الأحداث ، يمكنك إضافة حزمة Microsoft.Extensions.Logging.EventLog ثم تعديل Program.cs :


 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureLogging(loggerFactory => loggerFactory.AddEventLog()) .ConfigureServices(services => { services.AddHostedService<Worker>(); }); 

العمل في المستقبل


في المعاينات القادمة ، نخطط لتحسين تجربة استخدام Workers with Windows Services من خلال:


  1. إعادة تسمية UseWindowsServiceBaseLifetime إلى UseWindowsService
  2. أضف التكامل التلقائي والمحسّن مع "سجل الأحداث" عند تشغيله كخدمة Windows.

استنتاج


نأمل أن تجرب هذا القالب الجديد وتريد منك إخبارنا كيف ستسير الأمور ، يمكنك تقديم أي أخطاء أو اقتراحات هنا: https://github.com/aspnet/AspNetCore/issues/new/choose


الصورة الرمزية
جلين كوندرون

Source: https://habr.com/ru/post/ar446508/


All Articles