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 に答える