ĐÀO TẠO DOANH NGHIỆP : SỞ KHOA HỌC CÔNG NGHỆ TỈNH ĐỒNG NAI

ENTERPRISE TRAINING: DONG NAI DEPARTMENT OF SCIENCE AND TECHNOLOGY.

HÌNH ẢNH TẬP HUẤN LỚP SHAREPOINT WORKFLOW VÀ KIẾN TRÚC SHAREPOINT

PHOTOS OF SHAREPOINT WORKFLOW AND ARCHITECTURE CLASS.

HÌNH ẢNH TẬP HUẤN LỚP SHAREPOINT WORKFLOW VÀ KIẾN TRÚC SHAREPOINT

PHOTOS OF SHAREPOINT WORKFLOW AND ARCHITECTURE CLASS.

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