CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 665

665

Chương 17: Sự hòa hợp với môi trường Windows

OnStart

Tất cả các dịch vụ đều phải hỗ trợ phương thức

OnStart

, SCM gọi

phương thức này để khởi động dịch vụ. SCM truyền cho dịch vụ một
mảng kiểu chuỗi chứa các đối số cần thiết. Nếu

OnStart

không trả về

trong 30 giây thì SCM sẽ không chạy dịch vụ.

OnStop

Được SCM gọi để dừng một dịch vụ—SCM chỉ gọi

OnStop

nếu thuộc

tính

CanStop

true

.

OnPause

Được SCM gọi để tạm dừng một dịch vụ—SCM chỉ gọi

OnPause

nếu

thuộc tính

CanPauseAndContinue

true

.

OnContinue

Được SCM gọi để tiếp tục một dịch vụ bị tạm dừng—SCM chỉ gọi

OnContinue

nếu thuộc tính

CanPauseAndContinue

true

.

OnShutdown

Được SCM gọi khi hệ thống đang tắt—SCM chỉ gọi

OnShutDown

nếu

thuộc tính

CanShutdown

true

.

OnPowerEvent

Được SCM gọi khi trạng thái nguồn mức-hệ-thống thay đổi, chẳng
hạn một laptop chuyển sang chế độ suspend. SCM chỉ gọi

OnPowerEvent

nếu thuộc tính

CanHandlePowerEvent

true

.

OnCustomCommand

Cho phép mở rộng cơ chế điều khiển dịch vụ với các thông điệp điều
khiển tùy biến; xem chi tiết trong tài liệu .NET Framework SDK.

Như được đề cập trong bảng 17.5, phương thức

OnStart

phải trả về trong vòng 30 giây, do đó

bạn không nên sử dụng

OnStart

để thực hiện các thao tác khởi động tốn nhiều thời gian. Một

lớp dịch vụ nên hiện thực một phương thức khởi dựng để thực hiện các thao tác khởi động,
bao gồm việc cấu hình các thuộc tính thừa kế từ lớp

ServiceBase

. Ngoài các thuộc tính khai

báo các thông điệp điều khiển nào được dịch vụ hỗ trợ, lớp

ServiceBase

còn hiện thực ba

thuộc tính quan trọng khác:

ServiceName

—Là tên được SCM sử dụng để nhận dạng dịch vụ, và phải được thiết lập

trước khi dịch vụ chạy.

AutoLog

—Điều khiển việc dịch vụ có tự động ghi vào nhật ký sự kiện hay không khi

nhận thông điệp điều khiển

OnStart

,

OnStop

,

OnPause

, và

OnContinue

.

EventLog

—Trả về một đối tượng

EventLog

được cấu hình trước với tên nguồn sự kiện

(event source) trùng với thuộc tính

ServiceName

được đăng ký với nhật ký Application

(xem mục 17.3 để có thêm thông tin về lớp

EventLog

).

Bước cuối cùng trong việc tạo một dịch vụ là hiện thực phương thức tĩnh

Main

. Phương thức

này phải tạo một thể hiện của lớp dịch vụ và truyền nó cho phương thức tĩnh

ServiceBase.Run

. Nếu muốn chạy nhiều dịch vụ trong một tiến trình, bạn phải tạo một mảng

các đối tượng

ServiceBase

và truyền nó cho phương thức

ServiceBase.Run

. Mặc dù các lớp

dịch vụ đều có phương thức

Main

nhưng bạn không thể thực thi mã lệnh dịch vụ một cách trực

tiếp; bạn sẽ nhận được hộp thông báo như hình 17.2 nếu trực tiếp chạy một lớp dịch vụ. Mục
17.6 sẽ trình bày cách cài đặt dịch vụ trước khi thực thi.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.