2011-07-21 34 views
1

它似乎應該很容易,但我找不到在谷歌上的任何東西:
我有一個視頻存儲服務器,它有多個客戶端應用程序,安裝在用戶的機器上,通過(比方說)Web服務進行通信。
當返回一個DVD,我想能夠通知一直在等待那個DVD useres。代表跨越不同機器

在處理單個應用程序時,使用委託沒有問題。
我的問題是 - 這種方法是否也適用於遠程客戶端?

+0

「在Google上找不到任何內容」http://www.google.com.au/search?的SourceID =鉻,即= UTF-8&q = C%23 +遠程+過程+調用 –

+1

我並不是說,信息不存在。我的意思是說,我一直沒能找到任何(可能是因爲我不知道正確的術語) –

回答

1

您可以使用一個雙工WCF服務這一點。

但是,如果它真的是一個DVD處理服務,用戶不需要馬上得到通知,我會建議一個解決方案,用戶的客戶端每隔10分鐘輪詢一次服務器。實施起來要簡單得多。

+0

你的意思與此類似:http://stackoverflow.com/questions/1143743/wcf-event-declaration/1143777#1143777和這個:http://www.codeproject.com/KB/WCF/ASENS.aspx?在紙面上,實施起來似乎很輕鬆。你爲什麼說你更喜歡投票? –

+0

輪詢更加簡單:-)但是,如果您覺得它足夠無痛 - 繼續。 –

0

是 - 你可以使用.NET遠程。如果你想有一個客戶端應用程序,將提供人們可以連線爲止,然後是一個委託

http://www.codeproject.com/KB/IP/remotingandevents.aspx

+0

uggh,遠程處理。首先,據我所知,WCF應該取代遠程處理的功能。 secodnly,更重要的是 - 我參與了一個使用遠程處理的項目。 **再也不會**我會犯這個錯誤。在我看來,只有悲傷。我感興趣 - 你有使用遠程處理的積極經驗嗎? –

+0

我已經成功地使用了它,但從.NET 1.1開始就沒有這個需求。 WCF可能意在取代遠程處理,但遠程處理尚未廢棄,所以它仍是一種可能的解決方案。 –

0

:請參閱本文的一個簡單的例子。你會使用.net遠程處理。

我用這個例子:http://www.codeproject.com/KB/dotnet/DotNetRemotingEventsExpl.aspx

基本上你要做什麼,是揭露一個發佈一個已知對象的遠程服務器。有關事件的技巧是服務器必須知道客戶端連接事件處理程序的類型。所以你在這種情況下做的是你也提供了一個抽象類作爲事件接收器。

基本上該類會是這個樣子:

public abstract class MyEventSinkClass : MarshalByRefObject 
{ 
    public abstract void MyAbstractEventHandler(string arg1, string arg2); 

    public void MyEventHandler(string arg1, string arg2) 
    { 
     MyAbstractEventHandler(arg1,arg2); 
    } 
} 

然後在客戶端上,他們將創建一個類,並從MyEventSinkClass繼承。他們把它們的邏輯放在MyAbstractEventHandler的覆蓋中來處理事件。當他們線了,他們使用的是遠程的,而不是像通常那樣接線的情況下,他們需要導線他們繼承MyEventSinkClass到一個MyEventHandler方法的類的實例。然後當事件觸發時,它最終會調用overriden方法並執行它們的代碼。

您可以在我給出的鏈接中找到如何設置遠程服務器和客戶端的詳細信息,這並不困難。

0

如果您不想發明輪子,請使用消息排隊工具。 然後,當DVD返回時,您會在某個隊列上發佈消息。用戶正在註冊他們感興趣的DVD的隊列。

然後通信是持久的和異步的。即使用戶不在線,用戶也會收到通知(他們會在連接並輪詢隊列後收到通知)