2012-01-23 37 views
5

Tôi có 2 dịch vụ windows mà tôi đã tạo bằng C#.Cách liên lạc giữa các Dịch vụ Windows

Tôi muốn một trong các dịch vụ gọi một hàm trong dịch vụ cửa sổ thứ hai.

Tôi nên làm như thế nào?

EDIT:

Vấn đề là tôi phải ứng dụng nào đang chạy (tôi không cần họ được trình dịch vụ Thay là tốt quá) nhưng tôi cần 2 ứng dụng này để giao tiếp, ứng dụng này 2 trên cùng một máy chủ,

+0

Xem [bài đăng có liên quan] (http://stackoverflow.com/a/86286/175679) để liên lạc giữa các ứng dụng. – SliverNinja

+1

Loại dữ liệu nào? Có bao nhiêu tin nhắn? Kích thước tin nhắn trung bình là gì? – sll

Trả lời

3

Chắc chắn. Có một loạt các cơ chế IPC bạn có thể sử dụng. Từ chối, Người nghe TCP/HTTP, v.v.

Dịch vụ nào có cung cấp chức năng hữu ích bên ngoài dịch vụ khác không?

Xem chủ đề này cho thêm ý tưởng: IPC Mechanisms in C# - Usage and Best Practices

EDIT: Như Davide Piras chỉ ra, nếu WCF có sẵn để bạn có thể sử dụng, sau đó xem xét sử dụng nó. Nó sẽ đơn giản hóa cuộc sống. Các tập tin cấu hình WCF đôi khi là một nỗi đau để vận dụng, nhưng có một công cụ tốt đẹp cho rằng quá: http://msdn.microsoft.com/en-us/library/ms732009.aspx

+2

Bất cứ khi nào có thể truy cập từ xa và HTTP nên tránh để ủng hộ WCF –

2

Các dịch vụ trên cùng một hộp? Bạn có .NET 4 không? Rất khuyên bạn nên sử dụng chế độ nhanh nhất có thể, memory-mapped files.

Nếu chúng ở trên cùng một hộp, nhưng bạn không có .NET 4 hoặc nằm trong mạng Microsoft Windows đồng nhất, named pipes có thể hoạt động. Thêm vào vấn đề này, tôi sẽ sử dụng WCF over a named pipe.

4

Tôi tìm thấy tất cả các câu trả lời khác đúng nhưng hơi phức tạp một chút (WCF là một vấn đề lớn) và không thể mở rộng (bộ nhớ và các đường ống được đặt tên sẽ chỉ hoạt động trên cùng một máy chủ). Tôi đề nghị bạn DotNetMQ hệ thống nhắn tin. Dễ sử dụng và triển khai và cho phép bạn giao tiếp ngay cả giữa các quá trình chạy trên các máy chủ khác nhau.

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