Tôi đang thiết kế một Dịch vụ Windows để duy trì một danh sách các quy trình. Nó có thể chạy các nhiệm vụ trên chúng. Ví dụ - dừng một quy trình cụ thể (trong danh sách của nó), khởi động lại một quy trình cụ thể, chạy một quy trình mới và thêm nó vào danh sách, v.v.Thiết kế quy trình giám sát Dịch vụ Windows
Dịch vụ Windows này được điều khiển bởi ứng dụng web, thông qua dịch vụ WCF - Dịch vụ Windows chạy một dịch vụ WCF và ứng dụng web kết nối với dịch vụ WCF đó. Dịch vụ WCF xuất các phương thức như Restart(int id)
và Stop(int id)
.
Tôi có một số câu hỏi:
Khi một quá trình bất ngờ đóng cửa (ví dụ, vì một lỗi nội bộ), dịch vụ nên cập nhật một giá trị trong một số cơ sở dữ liệu. Ngay bây giờ, để làm điều này, tôi chỉ có một thread mà mỗi 30 giây nó sẽ kiểm tra nếu quá trình đang chạy hay không.
Đây có phải là quyền làm điều này không? Tôi có nên sử dụng sự kiện
Exit
không?Khi dịch vụ đóng lại, cho bất kỳ lý do, tất cả của các quá trình mà nó duy trì có trách nhiệm đóng quá. Cách đúng để làm điều này là gì?
Tôi đã suy nghĩ về việc chỉ lặp qua danh sách và giết tất cả các quy trình khi dịch vụ của
OnClose()
được gọi. Vấn đề với điều này là sự kiệnOnClose()
không phải lúc nào cũng được gọi. Ví dụ: nếu dịch vụ bất ngờ đóng cửa thì sao? Nó sẽ không gọiOnClose()
.Tôi nên đại diện cho từng công việc như thế nào (ví dụ: - khởi động lại quy trình hoặc ngừng quá trình)?
Hiện tại tôi đang sử dụng
System.Threading.Tasks
. Có đúng không?
Dịch vụ này phải có khả năng mở rộng cao, với những sai lầm tối thiểu.
Cảm ơn.
có vẻ như bạn đang phát minh lại Trình quản lý điều khiển dịch vụ Windows? –
vấn đề với SCM là nó không thể mở rộng. Trong dịch vụ của tôi, tôi cũng có các phương thức tùy chỉnh, không chỉ 'khởi động lại' và 'dừng'. –
Sau đó, chỉ cần viết một ứng dụng tùy chỉnh. để gửi những thông điệp đó đến quy trình lưu trữ SCM. Các dịch vụ Windows hỗ trợ mô hình này. –