2010-01-29 32 views
5

chúng tôi có dịch vụ windows đang chạy và chúng tôi cũng có ứng dụng giao diện điều khiển mà chúng tôi sử dụng để định cấu hình dịch vụ này, chúng tôi cũng có tùy chọn để xem nhật ký được ghi lại.Ứng dụng Console để giao tiếp với dịch vụ cửa sổ

Điều rất xấu với điều này là giao tiếp này được tạo bởi một tệp văn bản, ứng dụng bảng điều khiển ghi vào tệp văn bản và dịch vụ đọc nó và ngược lại.

Bạn sẽ sử dụng thông tin gì cho giao tiếp này? TCP/IP không phải là một tùy chọn vì ứng dụng bảng điều khiển sẽ chỉ được sử dụng cho dịch vụ chạy cục bộ.

API của Windows SendMessage phải là cách để đi?

cảm ơn!

Trả lời

6

Tôi khuyên bạn nên WCF là điều đầu tiên để xem xét cho tất cả các dấu phẩy trên cửa sổ nếu sử dụng .net như được xây dựng cho loại điều này và tương đối dễ sử dụng. Vì bạn đang loại trừ TCP, tôi khuyên bạn nên sử dụng Named Pipes Binding.

Ngoài ra còn có một số cửa sổ bắt đầu có sẵn cho các comm trong máy. Named Pipes (như đã đề cập), MailSlots, Shared Memory (Memory Mapped files) vv

Đề xuất của tôi sẽ được sử dụng Ống có tên hoặc với WCF hoặc nguyên bản.

0

Bộ nhớ dùng chung? Xem here cho một bài viết trên Codeproject, đây là một bài viết fastipc khác trên cùng một trang web. Có một mục nhập blog chi tiết về cách sử dụng một memory mapped file để chia sẻ qua trình bao bọc.

Hy vọng điều này sẽ giúp, Trân trọng, Tom.

1

Bạn chạy ít nguy cơ bị deadlocks hơn nếu bạn sử dụng phương pháp không chặn thông điệp. PostMessage hoặc SendNotifyMessage tốt hơn SendMessage vì chúng không chặn người gọi.

Nhưng chúng phụ thuộc vào dịch vụ có tay cầm cửa sổ. Phải không?

Bạn cũng có thể sử dụng thông báo WM_COPYDATA để chuyển nhiều hơn chỉ một wParam a lParam. Nếu bạn sử dụng thông báo này với PostMessage, bạn cần phải cẩn thận để không giải phóng bộ nhớ cho đến khi người nhận được thực hiện với nó. Đó là an toàn nhất để sử dụng SendMessage cho WM_COPYDATA.

+0

+1 - Tôi không biết OP đang sử dụng mã hóa gì, nhưng tôi đã sử dụng WM_COPYDATA PostMessage cho các giao dịch giữa các quá trình trong quá khứ. Nếu bộ nhớ được gán đúng, bạn thiết lập nó cho người nhận để deallocate nó trên nhận tin nhắn. Điều này keps nó không đồng bộ. – ChrisBD

+0

Lưu ý rằng phương pháp 'PostMessage' không thành công trên Vista và sau đó trong một số trường hợp do cô lập phiên 0 - xem ví dụ http://blogs.technet.com/askperf/archive/2007/04/27/application-compatibility-session-0-isolation.aspx –

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