2014-12-02 74 views
0

这看起来像是一个微软的bug。如果我尝试从一个函数在由客户端调用服务器返回一个对象,该对象有一个循环引用其自身:如何在SignalR中返回具有自己类的属性的对象?

public class User 
{ 
    public User OtherUser; 
} 

public User GetUser() 
{ 
    User user = new User(); 
    user.OtherUser = new User(); 
    user.OtherUser.OtherUser = user; 
    return user.OtherUser; 
} 

服务器功能再次被召回,则集线器不响应进一步调用,任何人遇到这种行为?我转而使用对象的id而不是对象的引用来解决这个问题。

+0

欢迎来到StackOverflow!请参阅[“应该在其标题中包含”标签“?”](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),其中的共识是“不,他们不应该”。 – 2014-12-02 15:27:04

+0

谢谢,抱歉。 – 2014-12-02 15:27:53

+0

不用担心:) ... – 2014-12-02 15:29:08

回答

1

你可能会考虑替代模式,同时采用SignalR和Web API。 SignalR是将数据推送给客户端的,对吧?如果客户不在那里怎么办?在这种情况下,将大型对象从服务器中移出到无法拾取的空间是没有意义的。

另一种方法是使用SignalR来推送小块信息 - 例如,一个用户ID - 然后让浏览器回调一个服务(因此Web API)以在准备好时获得更大的有效载荷。

+0

好主意,但我更喜欢简单。如果用户将被断开连接,则会有一个事件将其从连接的用户列表中删除,并且它将为空,并且不会发生任何事情。 – 2014-12-02 16:23:59