Agenda
- Introduction
- Step-by-step Implementation
Prerequisites
- .NET Core 6 SDK
- Visual Studio 2022
- SQL Server
Introduction
In this article, we will learn how to create a window service with dot net core web APIs help of Microsoft.Extension.Hosting and Microsoft.Extension.Hosting.WindowService.
Step-By-Step Implementation
Step 1. We are creating a project with the .Net Core Worker Service Template
Step 2. Add Project With Name Is DataLayer Its Work As Database communication.
The Solution looks like below.
Step 3. Next, we install the Package used for SQL Database connection for the DataLayer Project.
- Microsoft.EntityFrameworkCore.SqlServer
- Microsoft.EntityFrameworkCore.Tools
- Microsoft.EntityFrameworkCore
- Microsoft.EntityFrameworkCore.Design
Step 4. Next, we are installing the Package used for Window Services for the Main Project with the name User Status Update.
- Microsoft.Extension.Hosting
- Microsoft.Extension.Hosting.WindowService
Step 5. Next, we add Project reference into the Main Project (User Status Update) used for DataLayer Functions
Step 6. Next, we create a Table with the name is User to store User Information and Select All Records
Step 7. Next, we create a Stored procedure with the name (UserStatusUpdate) used to Update the Status of the User Table.
Step 8. The scaffold-DbContext command is used to generate code for Context and Entity Type for the Database.
Step 9. We see Auto Generate Db Context File.
Step 10. Next, we add a User Repository Class used to call stored procedures and update the Status of the User Based on Logic.
IUserRepository.cs Interface
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace User_Status_Update.Repository
{
public interface IUserRepository
{
void UserStatusUpdate();
}
}
UserRepository.cs Class
using DataLayer.Data;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace User_Status_Update.Repository
{
public class UserRepository : IUserRepository
{
private readonly EcommerceContext _context;
public UserRepository(EcommerceContext _context)
{
this._context = _context;
}
public void UserStatusUpdate()
{
this._context.Database.ExecuteSqlRaw("EXEC UserStatusUpdate");
}
}
}
Program.cs class
using DataLayer.Data;
using Microsoft.EntityFrameworkCore;
using User_Status_Update;
using User_Status_Update.Repository;
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json").Build();
IHost host = Host.CreateDefaultBuilder(args)
.UseWindowsService()
.ConfigureServices(services =>
{
services.AddDbContext<EcommerceContext>(opt=>
{
opt.UseSqlServer(configuration.GetConnectionString("Db"));
});
services.AddScoped<IUserRepository, UserRepository>();
services.AddHostedService<UserService>();
})
.Build();
await host.RunAsync();
UserService.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using User_Status_Update.Repository;
namespace User_Status_Update
{
public class UserService : BackgroundService
{
private readonly IUserRepository userRepository;
public UserService(IUserRepository userRepository)
{
this.userRepository = userRepository;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await Task.Run(() =>
{
Thread.Sleep(1000 * 60);
this.userRepository.UserStatusUpdate();
});
}
}
public override Task StartAsync(CancellationToken cancellationToken)
{
return base.StartAsync(cancellationToken);
}
public override Task StopAsync(CancellationToken cancellationToken)
{
return base.StopAsync(cancellationToken);
}
}
}
Step 11. Let's Right click on Project and select publish and from the publish target list choose the target method as file system and click on Save.
Next, we will Publish the project as User Status Update.exe file path.
Step 12. Open the command prompt as an administrator, write the command look below.
Step 13. Here you go, TestUserService Installed successfully.
Step 14. Select TestUserService and click start to start service; go to TestUserService.exe after every minute to update the User Status.
To Change Status with 2.