Wednesday, February 22, 2012

LESSON 04: WINDOWS SERVICES AND EVENT LOGGING ARCHITECTURE OF A WINDOWS SERVICE

Objectives:
ü Hiểu về windows service và cấu trúc của windows service project
ü Components của windows service và việc khai báo service bằng ngôn ngữ C#
ü Class installer của service, cài đặt và gỡ bỏ windows service
ü Màn hình(MMC) windows service và Handler error trong ứng dụng windows service
ü Trong thực tế thường sử dụng windows service


EXERCISES: Tạo mới Solution tên Exercise04Soln
Exercise 01 : Thêm windows service mới vào Solution tên là BaseService
· Đổi tên service1 thành OneService.cs
· Mở OneService chế độ Design View | R-Click | Add Installer
           

· Click trên serviceProcessInstaller1 | R-Click | Properties | Account chọn LocalSystem
           

· Chọn ServiceInstaller | R-Click | Properties
o Display Name: OneService
o Description: OneService of Windows Service
                       

· Trở lại OneService Service trên Design View | Click on “Click here to switch to code view”
                      
                     
và khai báo using System.IO;
· Trong phương thức OnStart
o Khai báo biến streamWriter kiểu dữ liệu StreamWriter
o Tạo 1 file tên là OneService.txt trong folder Exercise04Soln
o Khai báo code để ghi nội dung vào OneService.txt
§ Chuỗi "OneService has started" và ngày hiện hành khi ghi vào file
private static void WriteMessageToFile(string message)
{
string path = @"D:\Application And Website\Lop Dai Han\C# Nang Cao\Exercise04Soln\OneService.txt";
StreamWriter streamWriter;
if (!File.Exists(path))
{
streamWriter = new StreamWriter(path);
streamWriter.WriteLine(DateTime.Now.ToLongDateString() + message);
streamWriter.Close();
}
else
{
streamWriter = new StreamWriter(path, true);
streamWriter.WriteLine(DateTime.Now.ToLongDateString() + message);
streamWriter.Close();
}
}
protected override void OnStart(string[] args)
{
string message = "OneService has started";
WriteMessageToFile(message);
}
· Trong phương thức OnStop
o Khai báo biến streamWriter kiểu dữ liệu StreamWriter
o Thêm nội dung vào OneService.txt trong folder Exercise04Soln
o Khai báo code để ghi nội dung vào OneService.txt
§ Chuỗi "OneService has started" và ngày hiện hành khi ghi vào file
protected override void OnStop()
{
string message = "OneService has stopped";
WriteMessageToFile(message);
}
o Build windows service thành file Exe
o Mở Visual Studio 2008 Command Promt
o Cài đặt BasicService đến Services của windows bằng việc sử dụng tiện ích installutil(installutil /I tênservice.exe)
                        

Exercise 02 : Tiếp tục với BaseService project
o Mở service trong window xem OneService đã được đăng ký vào chưa ?
o Chọn OneService và Start
                 

o Mở file OneService.txt trong folder Exercise04Soln, kiểm tra có chuỗi “OneService has started" và ngày hiện hành
o Chọn OneService và Stop
                 

o Mở file OneService.txt trong folder Exercise04Soln, kiểm tra có chuỗi "OneService has stop" và ngày hiện hành
                    

Exercise 03 : Tiếp tục với BaseService project
· Mở Visual Studio 2008 Command Promt
· Gỡ bỏ BasicService đến Services của windows bằng việc sử dụng tiện ích uninstallutil(installutil /u tênservice.exe)
           

· Mở service trong window xem OneService đã được gỡ bỏ chưa ?
Exercise 04 : Thêm mới window Application tên ServiceMonitor
           

· Đổi tên Form1 thành ServiceMonitoring.cs
· Thêm ListView vào Form1 tên lvServices
· Thêm Button vào Form1 tên btnShow
           

· Chuyển qua chế độ code behind
o Add reference System.ServiceProcess
                      

· Trong sự kiện Click của btnShow
o Khai báo mảng ServiceController và lấy ra mảng Service từ phương thức GetService của class ServiceController
o Sử dụng foreach để hiển thị thông tin(ServiceName,Status) của mỗi service lên lvService
ServiceController[] arrayServiceController;
private void btnShow_Click(object sender, EventArgs e)
{
ShowServices();
}
private void ShowServices()
{
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Name");
dataTable.Columns.Add("Status");
DataRow dataRow;
arrayServiceController = ServiceController.GetServices();
foreach (ServiceController item in arrayServiceController)
{
dataRow = dataTable.NewRow();
dataRow["Name"] = item.ServiceName;
dataRow["Status"] = item.Status;
dataTable.Rows.Add(dataRow);
}
ListViewItem listViewItem = new ListViewItem();
lvServices.Items.Clear();
for (int i = 0; i < dataTable.Rows.Count; i++)
{
listViewItem = lvServices.Items.Add(dataTable.Rows[i][0].ToString());
listViewItem.SubItems.Add(dataTable.Rows[i][1].ToString());
}
Exercise 05 : Thêm mới window service tên AdvancedService
· Đổi tên service1 thành FolderMonitorService.cs
· Mở FolderMonitorService chế độ Design View
· R-Click | Properties
o Thay đổi lại CanShutDown : True
o Thay đổi lại CanPauseAndContinue : True
                        

· R-Click | Add Installer
· Click trên serviceProcessInstaller1 | R-Click | Properties | Account chọn LocalSystem
· Chọn serviceInstaller1 | R-Click | Properties
o Display Name: Folder Monitor Service
o Description: Service of Advanced Windows Service
· Trở lại FolderMonitorService Service trên Design View | Click on “Click here to switch to code view” và khai báo usingSystem.IO;
· Trong phương thức OnStart
o Khai báo biến fileSystemWatcher kiểu dữ liệu FileSystemWatcher
o Gán thuộc tính EnableRaisingEvents của fileSystemWatcher là true
o Khai báo Created Handler cho đối tượng fileSystemWatcher và chỉ đến 1 method
protected override void OnStart(string[] args)
{
FileSystemWatcher fileSystemWatcher =
new FileSystemWatcher(@"D:\Application And Website\Lop Dai Han\C# Nang Cao\Exercise04Soln");
fileSystemWatcher.EnableRaisingEvents = true;
fileSystemWatcher.Created += new FileSystemEventHandler(fileSystemWatcher_Created);
fileSystemWatcher.Deleted += new FileSystemEventHandler(fileSystemWatcher_Deleted);
}
§ Trong phương thức Created
· Khai báo biến streamWriter kiểu dữ liệu StreamWriter
· Tạo 1 file tên là Created.txt trong folder Exercise04Soln
· Khai báo code để ghi nội dung vào Created.txt với chuỗi “File has created” và thời gian tạo file
void fileSystemWatcher_Deleted(object sender, FileSystemEventArgs e) {
using (StreamWriter streamWrite = new StreamWriter(@"D:\Application And Website\Lop Dai Han\C# Nang Cao\Exercise04Soln\DeletedFile.txt"))
{
streamWrite.WriteLine(string.Format("File has deleted :{0}", DateTime.Now.ToString()));
}
    }
o Khai báo Deleted Handler cho đối tượng fileSystemWatcher và chỉ đến 1 method
§ Trong phương thức Deleted
· Khai báo biến streamWriter kiểu dữ liệu StreamWriter
· Tạo 1 file tên là Deleted.txt trong folder Exercise04Soln
· Khai báo code để ghi nội dung vào Created.txt với chuỗi “File has deleted” và thời gian xóa file
void fileSystemWatcher_Created(object sender, FileSystemEventArgs e) {
using (StreamWriter streamWrite=new StreamWriter(@"D:\Application And Website\Lop Dai Han\C# Nang Cao\Exercise04Soln\CreatedFile.txt"))
{
streamWrite.WriteLine(string.Format("File has created :{0}",DateTime.Now.ToString()));
}
   }
· Build window service thành file Exe
· Mở Visual Studio 2008 Command Promt
· Cài đặt AdvancedService đến Services của windows bằng việc sử dụng tiện ích installutil(installutil /I tênservice.exe)
Exercise 06 : Tiếp tục với AdvancedService project
· Mở Visual Studio 2008 Command Promt
· Gỡ bỏ AdvancedService đến Services của windows bằng việc sử dụng tiện ích uninstallutil(installutil /u tênservice.exe)
· Mở service trong window xem Folder Monitor Service đã được gỡ bỏ chưa ?
Exercise 07 : Tiếp tục với AdvancedService project
· Thêm mới windows service thành SqlServerService.cs
· Mở SqlServerService chế độ Design View
· R-Click | Add Installer
· Chọn serviceInstaller2 | R-Click | Properties
o Display Name: SQL Server Monitor Service
o Description: Service of Advanced Windows Service
· Trở lại SqlServerService Service trên Design View | Click on “Click here to switch to code view” và khai báo usingSystem.Data.SqlClient;
· Trong phương thức OnStart
o Khai báo tạo mới Table tên quochung trong database của bạn
protected override void OnStart(string[] args)
{
string commandText = "create table quochung(maso int primary key not null)";
SqlConnection sqlConnection = new SqlConnection("server=(local);database=StudentManagementForProfessional;integrated security=true");
sqlConnection.Open();
SqlCommand sqlCommand = new SqlCommand(commandText, sqlConnection);
sqlCommand.ExecuteNonQuery();
}
· Trong phương thức OnStop
o Khai báo xóa Table tên quochung trong database của bạn
· Build window service thành file Exe
· Cài đặt AdvancedService đến Services của windows bằng việc sử dụng tiện ích installutil(installutil /I tênservice.exe)
· Vào service Start SQL Server Monitor Service và kiểm tra quochung được tạo trong database chưa
· Stop SQL Server Monitor Service và kiểm tra quochung được xóa trong database chưa
Exercise 08 : Tiếp tục với ServiceMonitor project
· Thêm 1 button vào Form tên là btnStart (Text là Start)
· Khai báo code trong sự kiện Click của nút btnStart
o Lấy service được chọn trên lvService
o Khai báo khởi tạo service này sử dụng ServiceController
o Khai báo Try Catch và ghi lỗi vào Event Log
· Click Start để khởi động Service nếu nó Stopped
· Khởi động Service nếu nó Start và kiểm tra lỗi trong EventViewer


0 comments:

Post a Comment