2012-06-04 20 views
8

我知道這裏有關於WCF回調和事件的教程,但是我很難讓它們實際工作,或者它們太複雜。我是一個真正的初學者,所以我很想聽聽有沒有人知道任何紮實的初學者教程,這些教程都是針對我目前正在努力想明白的。請原諒我,如果我使用錯誤的術語(並請糾正我),就像我說我是一個初學者。使用WCF向客戶端發起事件

問題:

enter image description here

它看起來複雜得多,它確實是。基本上我試圖完成的是:

  1. 一個具有一些本地內存(讓我們說一個5個整數的數組)並運行WCF服務的主機。它將監聽來自客戶端的查詢,並在其中一個整數發生更改時(從外部源,例如通過命令提示符和Set()的用戶輸入)更新(事件?)到客戶端。
  2. 客戶端可以進行直接查詢以返回這五個整數之一或訂閱主機數組的特定索引。

我能做什麼:

我可以建立連接,但我的服務僅限於獨立的功能。客戶端可以進行「查詢」,但僅限於遠程函數調用(例如「add」,其中所有參數都與函數一起傳遞並且處理在內部完成)。

什麼,我想弄清楚:

  1. 我如何可以訪問從服務合同功能主機內存中保存的一些變量?例如,我怎樣才能從客戶端GetInt()調用一個方法來簡單地返回存儲在主機上應用程序內存中的東西?
  2. 如何從主機向客戶端推送「消息」?例如,在主機中,調用TellClient(int x),它可以在客戶端調用某個函數?這可能沒有在雙方運行服務?

TLDR:

主持人:服務< - >客戶端。有沒有一種方法可以在沒有客戶端調用任何函數(無輪詢或查詢)的情況下將數據(簡單地說是int)推送到客戶端?有沒有辦法讓WCF服務訪問變量存儲在主機應用程序的實例中而不使用靜態成員?這可以通過簡單的方式完成嗎?

感謝您的幫助和時間,我知道我寫了一本書。如果有人知道任何好的教程,請將我指向他們。 但是請不要指向我的客戶端只需調用主機上的add(返回結果)的Add(int x,int y)示例 - 我已經完成了幾次這樣的操作,它並沒有幫助我掌握WCF的真實功能。在這一點上,我真的沒有試圖完成任何嚴肅的事情,我真的想保持簡單,這樣我就可以瞭解WCF可以做什麼,而且我沒有發現文檔很有幫助。再次感謝大家。

回答

6

通常WCF用於請求回覆的方式,客戶端發出請求;和服務器回覆。你想實現的是「推拉」服務;或者用微軟的話來說就是一種雙面服

在雙工服務客戶端只連接到服務和服務註冊到一些內部列表。無論何時發生事件(或其他事件),它都會向註冊客戶發送消息。 WCF在您的問題的上下文中的關鍵術語是「雙工服務」(您可以在谷歌找到許多結果)。您可以參考以下教程; msdncodeproject

對於問題的第二部分,答案是肯定的。但這並不簡單。您需要編寫一些「wcf行爲」,例如IInstanceProvider可能會對您有所幫助。對於所有請求,您可以自己創建服務實例,並將所需的參數注入到服務實例中。 參考以下可能會有所幫助:stackoverflowmsdn

這個問題有點寬泛,所以我不能100%確定這是否是直接的答案。但至少使用提供的關鍵字可能會找到正確的方向。

+0

這是很棒的信息,非常感謝您的幫助 - 他們的術語和關鍵詞是我不知道的,所以我找不到我想要的東西。我不害怕做這項研究。我已經找到了更接近我所尋找的東西(通過尋找雙工服務)。再次感謝! – Softerware