آشنایی با AOP Interceptors
یکی از تغییرات مهم قالب ایجاد پروژههای ASP.NET Core 3.0، تغییر فایل program.cs آن است که در آن از یک Generic Host بجای روش قبلی Web Host، استفاده شدهاست. علت آن فراهم آوردن امکان استفادهی از قابلیتهایی مانند تزریق وابستگیها، logging، تنظیمات برنامه و غیره، در برنامههای غیر وب نیز میباشد. یکی از این انواع برنامهها، سرویسهای پسزمینهی غیر HTTP هستند. به این ترتیب میتوان برنامهای شبیه به یک برنامهی وب ASP.NET Core را ایجاد کرد که تنها کارش اجرای سرویسهای غیر وبی است؛ اما به تمام امکانات و زیر ساختهای ASP.NET Core دسترسی دارد.
برای ایجاد این نوع برنامهها در NET Core 3x. میتوانید دستور زیر را در پوشهی خالی که ایجاد کردهاید، اجرا کنید:
dotnet new worker
appsettings.Development.json
appsettings.json
MyWorkerServiceApp.csproj
Program.cs
Worker.cs
- فایل csproj آن دارای این محتوا است:
<Project Sdk="Microsoft.NET.Sdk.Worker"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> <UserSecretsId>dotnet-MyWorkerServiceApp-B76DB08E-FFBB-4AD1-89B5-93BF483D1BD0</UserSecretsId> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.0-preview8.19405.4" /> </ItemGroup> </Project>
- محتوای فایل Program.cs آن بسیار آشنا است و دقیقا کپی همان فایلی است که در برنامههای ASP.NET Core 3x حضور دارد:
namespace MyWorkerServiceApp { public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); }); } }
در متد ConfigureServices، انواع اقسام سرویسها را منجمله یک HostedService که در مطلب جاری به آن پرداخته شده، میتوان افزود. سرویس Worker ای که در اینجا به آن ارجاعی وجود دارد، به صورت زیر تعریف شدهاست:
public class Worker : BackgroundService { private readonly ILogger<Worker> _logger; public Worker(ILogger<Worker> logger) { _logger = logger; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); await Task.Delay(1000, stoppingToken); } } }
یک نکتهی تکمیلی: روش تبدیل کردن یک BackgroundService به یک Windows Service
اگر برنامهی NET Core. شما در ویندوز اجرا میشود، میتوانید این برنامهی BackgroundService را به یک سرویس ویندوز NT نیز تبدیل کنید. برای اینکار ابتدا بستهی نیوگت Microsoft.Extensions.Hosting.WindowsServices را به پروژه اضافه کنید. سپس جائیکه CreateHostBuilder صورت میگیرد، متد UseWindowsService را فراخوانی کنید:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices((hostContext, services) => { //services.AddHttpClient(); services.AddHostedService<Worker>(); });
cs create WorkerServiceDemo binPath=C:\Path\To\WorkerServiceDemo.exe
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSystemd() .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); });
WF:Windows Workflow #۶
namespace LeadGenerator { public sealed class CreateLead : CodeActivity { public InArgument<string> ContactName { get; set; } public InArgument<string> ContactPhone { get; set; } public InArgument<string> Interests { get; set; } public InArgument<string> Notes { get; set; } public InArgument<string> ConnectionString { get; set; } public OutArgument<Lead> Lead { get; set; } protected override void Execute(CodeActivityContext context) { // Create a Lead class and populate it with the input arguments Lead l = new Lead(); l.ContactName = ContactName.Get(context); l.ContactPhone = ContactPhone.Get(context); l.Interests = Interests.Get(context); l.Comments = Notes.Get(context); l.WorkflowID = context.WorkflowInstanceId; l.Status = "Open"; // Insert a record into the Lead table LeadDataDataContext dc = new LeadDataDataContext(ConnectionString.Get(context)); dc.Leads.InsertOnSubmit(l); dc.SubmitChanges(); // Store the request in the OutArgument Lead.Set(context, l); } } }
- در یک سری پلیرها به نظر وجود BOM برای خواندن زیرنویس فارسی اجباری است؛ وگرنه فایل را یونیکد تشخیص نمیدهند.
- در حین ذخیره سازی از Encoding.Unicode استفاده کردهاید (UTF 16 هست در دات نت). شاید Encoding.UTF8 را هم آزمایش کنید، مفید باشد. حجم UTF 16 نسبت به UTF 8 نزدیک به دو برابر است و شاید بعضی پخش کنندهها با آن مشکل داشته باشند.
- به روز رسانی نرم افزار و firmware دستگاه هم در بسیاری از اوقات مفید است؛ خصوصا برای رفع مشکلات یونیکد آنها.
Learn how to harness the power of the Syncfusion UI components from within a Blazor server application. We’ll also integrate the Microsoft Identity technology into our Blazor application to leverage login, registration, authorization and authentication functionality. Syncfusion provides a UI component suite for building powerful web, desktop, and mobile apps.
⭐️ Course Contents ⭐️
⌨️ (0:00:13) Introduction
⌨️ (0:00:49) Course Overview
⌨️ (0:10:25) Technologies used to Develop the Sales Management Application
⌨️ (0:13:20) Getting Started - Create the Blazor Project through Visual Studio 2022
⌨️ (0:15:02) Introduction to the Syncfusion DataGrid Component
⌨️ (0:43:39) Create the Database using Ef Core Code First Migrations
⌨️ (1:22:02) Integrate the Syncfusion DataGrid Component into the Application
⌨️ (3:02:44) Integrate the Syncfusion ListView component into the Sale Management Application
⌨️ (4:25:23) Integration of the Syncfusion Charts into the Sales Management Application to Display Sales Order Analytical Data
⌨️ (5:11:04) Create Dashboards for Employees
⌨️ (6:03:51) Integrate the Syncfusion Diagram into the Sales Management Application
⌨️ (6:22:25) Integrate the Syncfusion Scheduler into the Sales Management Application
⌨️ (6:52:53) Integrate Microsoft Identity into the Sales Management Application
⌨️ (7:40:34) Wrapping up
WebKit بر روی GitHub
On June 23rd, the WebKit project froze its Subversion tree and transitioned management and interaction with our source code to git
on GitHub.