2012-09-08 31 views
5

Tôi đã tạo một dự án dịch vụ cửa sổ. Và nếu bạn tạo một dự án mới, bạn có được một cái gì đó như thế này:Tôi có nên chỉ sử dụng một dịch vụ mới() hoặc nhiều hơn không?

ServiceBase[] ServicesToRun; 
ServicesToRun = new ServiceBase[] 
{ 
    new Service1() 
}; 
ServiceBase.Run(ServicesToRun); 

Và bây giờ tôi có thêm một số chức năng, hẹn giờ để lớp học của tôi Service1() và sau đó mọi thứ đều tốt.

Bây giờ hãy nói, dịch vụ của tôi nên làm một số công cụ như: đọc một số tác phẩm, xóa một số thư mục, kiểm tra các kết nối ...

Và tất cả trong số họ nên chạy async. Điều gì bây giờ tốt hơn? Sao chép tất cả các functiont trong Service1() và không thay đổi bất cứ điều gì khác hoặc để tạo cho mỗi "công cụ" một lớp mới (Service1(), Service2(), ...) và thêm chúng như

ServicesToRun = new ServiceBase[] 
{ 
    new Service1(), 
    new Service2() //not sure this will compile 
}; 

Just hỏi. Có lẽ tôi không hiểu 100% các dịch vụ đang hoạt động như thế nào ...

+0

Câu hỏi thú vị. Tôi đã tự hỏi nhưng chưa bao giờ thử nó. Ồ, nó chắc chắn sẽ * biên dịch * - câu hỏi thực sự là: nó hoạt động *. Do API chấp nhận một mảng, giả định mặc định của tôi là "có, điều đó sẽ hoạt động tốt". Nhưng ... Chưa thử. Tất nhiên, kể từ khi dịch vụ cần phải bắt đầu một thread mới anyway, bạn chỉ có thể sử dụng một cá thể dịch vụ duy nhất để bắt đầu 3 bộ hoạt động, –

+0

Bạn có thấy điều này? http://stackoverflow.com/questions/1688275/can-i-have-multiple-services-hosted-in-a-single-windows-executable - thảo luận về cách nhưng không phải là lý do. Nó thực sự là một câu hỏi thiết kế và phụ thuộc vào những gì bạn đang làm. – ongle

Trả lời

0

Điều này có thể hơi quá chung chung đối với câu hỏi nhưng dịch vụ Windows sẽ thực hiện một hoặc một nhóm chức năng liên quan. Nói chung, càng ít dịch vụ càng tốt, nhưng khi dịch vụ bắt đầu thực hiện nhiều việc, hãy xem xét tách chúng ra nếu:

  1. Chúng yêu cầu mức độ bảo mật khác nhau. Ví dụ: nếu một số chức năng nhất định cần quyền truy cập của quản trị viên và một số thì không, hãy xem xét tách chúng thành các dịch vụ khác nhau.
  2. Người dùng có thể hoặc muốn một tính năng đang chạy (nghĩa là dịch vụ) chứ không phải một tính năng khác. Ví dụ, chức năng nhất định có thể phụ thuộc vào một thành phần tùy chọn hoặc một thành phần có thể không được cài đặt.
Các vấn đề liên quan