2012-07-10 217 views
2

我已經能夠使用SignalR將消息推送到客戶端以及從客戶端返回到服務器,並且迄今爲止一直是一種祝福。SignalR:返回值的調用方法

我想不能做的,這可能只是一些東西SignalR不能處理...是爲了調用響應。

SignalR是否允許來自調用的響應?如果是這樣,我可以向客戶提出請求,只使用第一個響應?

我看到了HubResponse和task.result的引用,但我不太清楚如何使用hub方法從客戶端返回值。

我用它打了不少,要麼得到了AggregateException,或從Task<Object>無效轉換到Task<MyType>

回答

1

連接的客戶端只播出。那就是服務器無法直接提出請求。因此,您需要做一些類似Hub的方法,其中一個客戶端可以請求其他人完成請求,然後Hub將該請求廣播給所有連接的客戶端,然後,無論哪個客戶端首先響應,您都可以將其廣播回原始客戶端。您需要在Hub中維護自己的狀態,以明確地將請求/響應指向正確的受衆。我還會認爲,只要你收到你的第一個回答,你就會想告訴所有其他客戶不要打擾/停止試圖回答這個問題。

我不確定我能否爲這個規定一個確切的體系結構,而不需要更多的細節。對於初學者來說,任何客戶應該能夠迴應任何請求還是會對客戶進行分類?如果您可以對客戶進行分類,那麼您可以確保您只使用組播將對他們有意義的請求進行廣播。接下來你基本上是試圖定義一個可以被問到的所有問題的界面,或者你希望該設置能夠在不改變Hub的情況下進行擴展嗎?這將決定您是使用強類型的Hub方法,還是隻使用某種通用的AskQuestion(string questionId)。如果前者那麼你可能不會像前面提到的那樣使用組,而只是爲每個請求類別設置不同的集線器。

+0

嗯,這不完全是我的意思,但這是我的錯,因爲沒有解釋更好...在你的例子中說,你想要中心查詢客戶端,以確定我的方法的價值如此...'public int MyMethod () { return Clients.DoSomeCalculation(); }' 我明白複雜性是誰會作爲答案的答案......但在我的情況下,我應該總是有一個x類型的客戶端來處理請求。 – Ronnyek 2012-07-10 17:41:47

+0

嗯,這並不完全清楚,對不起。我可以修改我的答案來匹配。 – 2012-07-10 17:52:32

+0

謝謝我擔心它是如何工作的......不幸的是,我可以制定一個計劃。欣賞輸入。 – Ronnyek 2012-07-10 19:17:37