1

我做了一个简单的聊天应用程序来学习一些新东西,我现在想做的是添加当前登录聊天的用户列表。所以我这样做了:

        public ObservableCollection<User> GetUserList()
    {
        ObservableCollection<User> users = new ObservableCollection<User>();

        IEnumerable<User> userEnu;
        userEnu = from u in _clientDic
                  select new User
                  {
                      UserName = u.Key
                  };

        foreach (User user in userEnu)
        {
            users.Add(user);
        }

        IEnumerable<IDuplexClient> clients;
        clients = from p in _clientDic
                  select p.Value;

        foreach (IDuplexClient item in clients)
        {
            item.DisplayUserList(users);
        }
        return users;
    }

还有对应User的DataConctract。反正。此方法获取字典中存在的所有用户并将它们放入 ObservableCollection。

我想要做的是将数据从这个集合推送给用户,如果它发生变化(用户登录或注销)。

到目前为止,我只能通过调用手动从服务器中提取数据

_client.GetUserListAsync()

手动。Silverlight 应用程序中的槽推按钮。但这不是为什么我使用双工连接来强制用户(或客户端应用程序)定期调用服务器,检查是否有新数据。我希望服务器将任何新数据推送到客户端。

    [ServiceContract]
public interface IDuplexClient
{
    [OperationContract(IsOneWay = true)]
    void DiplayMessage(string message);

    [OperationContract(IsOneWay = true)]
    void DisplayUserList(ObservableCollection<User> userColl);
}

这是服务合同。老实说,我真的不知道这是否相关,但我发布它以防万一。

4

1 回答 1

0

你可以使用pollingDuplexHttpBinding 检查这个来做到这一点

于 2011-04-20T15:36:08.547 回答