いくつかの新しいことを学ぶために簡単なチャット アプリケーションを作成しました。今やりたいことは、現在チャットにログインしているユーザー リストを追加することです。だから私はこれをしました:
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);
}
そして、ここにサービス契約があります。正直なところ、これが関連しているかどうかはよくわかりませんが、念のため投稿します。