为什么我必须使用HubContext将复杂对象发送回客户端?

时间:2015-10-18 15:01:29

标签: c# .net signalr

我开始使用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)有什么区别?为什么我的示例适用于上下文但不适用于集线器?

0 个答案:

没有答案