2012-06-04 22 views
8

Tôi biết có các hướng dẫn liên quan đến các cuộc gọi và sự kiện WCF, nhưng tôi gặp khó khăn khi thực hiện công việc hoặc chúng quá phức tạp. Tôi là một người mới bắt đầu thực sự, vì vậy tôi rất muốn nghe nếu có ai biết về bất kỳ hướng dẫn mới bắt đầu vững chắc mà là nhằm mục đích những gì tôi đang cố gắng để cụ thể tìm ra vào lúc này. Xin hãy tha thứ cho tôi nếu tôi sử dụng thuật ngữ sai (và hãy sửa tôi), như tôi đã nói tôi là người mới bắt đầu.Các sự kiện hỏa hoạn cho khách hàng sử dụng WCF

Vấn đề:

enter image description here

Nó có thể trông phức tạp hơn nó thực sự là. Về cơ bản những gì tôi đang cố gắng đạt được là:

  1. Một máy chủ có bộ nhớ cục bộ (cho phép đọc 5 số nguyên) và chạy dịch vụ WCF. sẽ lắng nghe các truy vấn từ máy khách và kích hoạt cập nhật (sự kiện?) cho máy khách khi một trong các số nguyên này được thay đổi (từ nguồn bên ngoài, chẳng hạn như người dùng nhập thông qua dấu nhắc lệnh và Set()).
  2. Một khách hàng có thể thực hiện truy vấn trực tiếp để trả lại một trong năm số nguyên này hoặc đăng ký một chỉ mục cụ thể của mảng máy chủ.

Những gì tôi có thể làm:

tôi có thể thiết lập kết nối, nhưng dịch vụ của tôi được giới hạn chức năng độc lập. Khách hàng có thể thực hiện "truy vấn", nhưng bị giới hạn đối với gọi hàm từ xa (chẳng hạn như "thêm", trong đó tất cả các tham số được truyền với hàm và quá trình xử lý được thực hiện nội bộ).

Những gì tôi đang cố gắng tìm ra:

  1. Làm thế nào tôi có thể truy cập một số biến được tổ chức trong bộ nhớ máy chủ từ các chức năng hợp đồng dịch vụ? Ví dụ, làm thế nào tôi có thể gọi một phương thức từ khách hàng GetInt() mà chỉ đơn giản là sẽ trả lại một cái gì đó được lưu trữ trong bộ nhớ ứng dụng trên máy chủ?
  2. Làm cách nào để tôi có thể đẩy "tin nhắn" tới máy khách từ máy chủ? Ví dụ, trong máy chủ, gọi TellClient (int x), mà sẽ gọi một số chức năng ở phía khách hàng? Điều này có thể xảy ra mà không cần chạy một dịch vụ ở cả hai phía?

TLDR:

Máy chủ: Dịch vụ < -> Client. Có cách nào để đẩy dữ liệu (chỉ đơn giản là một int) cho khách hàng mà không có khách hàng gọi bất kỳ chức năng (không có bỏ phiếu hoặc truy vấn)? Có cách nào để có các biến truy cập dịch vụ WCF được lưu trữ trong ví dụ của ứng dụng máy chủ mà không sử dụng các thành viên tĩnh không? Điều này có thể được thực hiện một cách đơn giản?

Cảm ơn sự giúp đỡ và thời gian của bạn, tôi biết tôi đã viết một cuốn sách. Nếu có ai biết về bất kỳ hướng dẫn hay nào, vui lòng chỉ cho tôi. Nhưng XIN VUI LÒNG - Đừng chỉ cho tôi vào ví dụ Thêm (int x, int y) nơi máy khách chỉ cần thêm vào máy chủ và trả về kết quả - Tôi đã thực hiện việc này vài lần và nó không giúp tôi nắm bắt được chức năng thực sự của WCF. Tôi thực sự không cố gắng thực hiện bất cứ điều gì nghiêm túc vào thời điểm này, tôi thực sự cố gắng giữ nó đơn giản để tôi có thể tìm hiểu WCF có thể làm gì và tôi không tìm thấy tài liệu hữu ích. Cảm ơn một lần nữa tất cả mọi người.

Trả lời

6

Nói chung WCF được sử dụng theo cách trả lời yêu cầu, nơi khách hàng đưa ra yêu cầu; và trả lời của máy chủ. Những gì bạn muốn đạt được là một dịch vụ "đẩy và kéo"; hoặc trong Microsoft có nghĩa là một dịch vụ song công.

Trong ứng dụng khách dịch vụ song công, chỉ cần kết nối với dịch vụ và dịch vụ đăng ký chúng vào một số danh sách nội bộ. Và bất cứ khi nào một sự kiện (hoặc cái gì đó khác) phát sinh, nó sẽ gửi một thông điệp tới các khách hàng đã đăng ký. Các thuật ngữ chính cho WCF trong bối cảnh của câu hỏi của bạn là "dịch vụ song công" (bạn có thể google nó tìm thấy nhiều kết quả). Bạn có thể tham khảo các hướng dẫn sau; msdn hoặc codeproject

Đối với phần thứ hai của câu hỏi của bạn, câu trả lời là có. Nhưng điều này không đơn giản. Bạn cần viết một số "hành vi wcf", ví dụ: IInstanceProvider có thể giúp bạn. Đối với tất cả các yêu cầu, bạn chỉ có thể tự tạo cá thể dịch vụ, với các tham số mong muốn được tiêm vào cá thể dịch vụ. Tham khảo những điều sau đây có thể giúp: stackoverflow hoặc msdn.

Câu hỏi là một chút rộng vì vậy tôi không chắc chắn 100% liệu đây có phải là câu trả lời trực tiếp hay không. Nhưng ít nhất bằng cách sử dụng các từ khóa được cung cấp, bạn có thể tìm thấy đúng hướng.

+0

Đây là thông tin tuyệt vời, cảm ơn bạn rất nhiều - thuật ngữ và từ khóa là những gì tôi không biết, vì vậy tôi không thể tìm thấy những gì tôi đang tìm kiếm thông qua tìm kiếm. Tôi không ngại làm nghiên cứu. Tôi đã tìm thấy một cái gì đó gần gũi hơn với những gì tôi đang tìm kiếm (bằng cách tìm kiếm các dịch vụ song công). Cảm ơn một lần nữa! – Softerware

3

Bạn đã thử bài viết này chưa? http://msdn.microsoft.com/en-us/magazine/cc163537.aspx#S6. Tôi nghĩ rằng đó là một lời giải thích tốt về callbacks. Nó thảo luận về khung công tác đăng ký/đăng ký là giải pháp cho yêu cầu "không bỏ phiếu hoặc truy vấn" của bạn.

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