我开始使用SignalR,并想知道为什么会这样:
public interface IPadHubClient
{
void AddEvent(EntityEvent entityEvent);
}
public class PadHub : Hub<IPadHubClient>
{
public void AddEvent(EntityEvent entityEvent)
{
var context = GlobalHost.ConnectionManager.GetHubContext<PadHub>();
context.Clients.All.AddEvent(entityEvent);
}
}
虽然没有:
public class PadHub : Hub<IPadHubClient>
{
public void AddEvent(EntityEvent entityEvent)
{
Clients.All.AddEvent(entityEvent);
}
}
正如您所看到的,在我的集线器上,我尝试将从一个客户端收到的复杂对象EntityEvent
传递给所有其他客户端。 EntityEvent
是包含许多简单属性的普通对象。在两种情况下调用集线器上的方法都可以:如果我将客户端的方法签名更改为字符串参数并在集线器上传递Id
参数的entityEvent
,则会得到正确的ID。很明显,将复杂对象从客户端传递到集线器都适用于这两种情况。
但是,在第二种情况下不调用客户端上的处理程序方法。在第一种情况下,客户端正确接收复杂对象。
如果需要,我可以提供更多详细信息,但我怀疑它不是错误,而是设计......?
所以:调用Clients.All.Something(ComplexType parameter)
和context.Clients.All.Something(ComplexType parameter)
有什么区别?为什么我的示例适用于上下文但不适用于集线器?