2009-12-11 36 views
6

Tôi đang viết một dịch vụ cửa sổ sẽ thực hiện rất nhiều giao tiếp mạng và tôi cần một cách để thông báo cho người dùng (nếu đã đăng nhập) bất kỳ ngoại lệ/lỗi. Tôi biết thực tế là không tốt để cho phép một dịch vụ tương tác với máy tính để bàn, vậy có cách nào khác để thông báo cho người dùng rằng đã xảy ra lỗi không? Tôi biết về ghi nhật ký sự kiện, nhưng tôi cũng muốn có thể hiển thị bong bóng thông báo từ khay hệ thống hoặc thứ gì đó thu hút sự chú ý của người dùng.Cách tốt nhất cho dịch vụ .Net Windows để báo cáo lỗi cho người dùng

Trả lời

7

Vui lòng xem xét sử dụng Nhật ký sự kiện và một ứng dụng riêng biệt chỉ để theo dõi. Bạn cũng có thể xem xét sử dụng email hoặc MSMQ.

4

Còn việc sử dụng ứng dụng khác để tương tác với ứng dụng này và thông báo cho người dùng về lỗi? Bằng cách này, bạn có thể có "tùy chọn" cho người dùng. Có thể tắt cảnh báo, email, v.v.

5

Thông thường, bạn sẽ có một ứng dụng phụ mà dịch vụ có thể thông báo. Ví dụ, bạn có thể có một biểu tượng khay hệ thống (ugh) mà bật lên bóng bay (gấp đôi ugh) khi một cái gì đó quan trọng xảy ra. Bản thân ứng dụng có thể hiển thị giao diện cho các cài đặt cho dịch vụ của bạn.

2

Bạn sẽ phải cung cấp giải pháp thay thế cho tùy chọn "tương tác với máy tính để bàn". Nó không còn được hỗ trợ trong Vista và Win7 nữa. Việc cấp quyền truy cập người dùng bị hạn chế vào giao diện người dùng chạy trên tài khoản có đặc quyền cao được xem là quá nguy hiểm về bảo mật. Google "phiên 0 cách ly" để tìm chi tiết về điều này.

Bạn cần phải sử dụng một trong các cơ chế interop quy trình được .NET hỗ trợ để thiết lập tương tác giữa dịch vụ của bạn và ứng dụng giao diện người dùng. Để gửi tin nhắn đơn giản, hãy sử dụng ổ cắm hoặc ống có tên. Tên đường ống cần phải có tiền tố "Toàn cầu \" để hiển thị cho tất cả các phiên. Đối với các tương tác phức tạp hơn, bạn có thể sử dụng Remoting hoặc WCF.

Hãy đảm bảo giải quyết khả năng người dùng quyết định không chạy hoặc tắt ứng dụng dành cho máy tính để bàn. Bạn nên đăng nhập bất kỳ lỗi nào với lớp EventLog.

1

Để giải quyết vấn đề này, tôi đã tạo ứng dụng Windows Forms mà người dùng có thể bắt đầu và dừng theo ý muốn. Tất nhiên, dịch vụ Windows đang chạy trong nền 24/7. Khi ứng dụng được khởi động, nó sử dụng Windows Communication Foundation (WCF) để truy vấn dịch vụ cho trạng thái hiện tại của nó - nó đang hoạt động, số lượng máy khách được kết nối, bao nhiêu byte đã được thu thập, v.v. bên trong ứng dụng.

Tôi đã cố gắng bắt chước hành vi của Trình quản lý tác vụ, vì vậy tôi cũng đã thêm System.Windows.Forms.NotifyIcon vào biểu mẫu chính của ứng dụng hiển thị biểu tượng trong khay hệ thống. Khi ứng dụng đang mở, biểu tượng khay hệ thống được hiển thị. Người dùng có thể thu nhỏ ứng dụng vào thanh tác vụ hoặc có thể ẩn hoàn toàn ứng dụng. Biểu tượng khay chỉ biến mất khi người dùng đóng ứng dụng. Biểu tượng khay cũng hỗ trợ nhấp đúp để mở lại ứng dụng và menu bật lên để truy cập nhanh vào chức năng.

Trong mọi trường hợp, điểm tôi muốn thực hiện là WCF là cách đơn giản nhất để ứng dụng dịch vụ và giao diện người dùng của bạn giao tiếp. Mọi người sẽ tranh luận về đường cong học tập 'dốc' được liên kết với WCF, nhưng tôi không trải nghiệm điều đó. Tôi thấy WCF là một cách rất hiệu quả để phát triển giao tiếp giữa các quá trình. Bạn có thể xem this video để cung cấp cho bạn một số thông tin chi tiết về mô hình lập trình WCF.

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