2012-07-10 235 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