如何将数据(SQL 或 LINQ)从 WCF Duplex 服务推送到 Silverlight 客户端

发布于 2024-11-02 06:24:15 字数 1421 浏览 3 评论 0原文

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

        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);
}

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

I have made simple chat application to learn some new things, and what I want to do now, is to add user list that are currently logged into chat.
So I did this:

        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;
    }

There is also DataConctract that coressponding to User.
Anyway. This method get all users that are present in dictionary and put them into ObservableCollection.

What I want to do, is to push data from this collection to user, if it change (users log or logout).

So far I only managed to manually pull data from Server by calling

_client.GetUserListAsync()

manually. Trough pushing button in silverlight app.
But that's not why I'm using duplex connection, to force user (or client app) for perdiodic calls to server, that check if there is new data or not. I want server to push any new data to client.

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

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

And here is service contract. Honestly I don't really know if this is relevant, but I post it just in case.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

涙—继续流 2024-11-09 06:24:15

您可以使用 pollingDuplexHttpBinding 来做到这一点

you can do that using pollingDuplexHttpBinding Check this

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文