2011-07-02 61 views
5

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)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ện OnClose() 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ọi OnClose().

  • 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.

+4

có vẻ như bạn đang phát minh lại Trình quản lý điều khiển dịch vụ Windows? –

+1

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'. –

+1

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. –

Trả lời

0

Để đóng các quy trình khi dịch vụ đóng, tôi nghĩ các bước sau có thể thực hiện công việc cho bạn.

  1. Viết chương trình nhỏ có thể đóng các quá trình bạn muốn đóng.
  2. Đi tới Trình quản lý điều khiển dịch vụ và nhấp chuột phải vào dịch vụ của bạn.
  3. Chuyển đến tab Khôi phục và chỉ định chương trình của bạn để thực thi trong hộp danh sách Thất bại đầu tiên, Thất bại thứ hai và Hộp thất bại sau.

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan