Я сделал простое приложение чата, чтобы узнать что-то новое, и сейчас я хочу добавить список пользователей, которые в данный момент вошли в чат.Итак, я сделал это:
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;
}
Также существует DataConctract, который отвечает пользователю.Тем не мение.Этот метод получает всех пользователей, присутствующих в словаре, и помещает их в ObservableCollection.
Что я хочу сделать, это передать данные из этой коллекции пользователю, если они изменятся (вход или выход пользователей).
До сих пор мне удавалось только вручную извлекать данные с сервера, вызывая
_client.GetUserListAsync()
вручную.Нажатие кнопки в приложении Silverlight.Но это не то, почему я использую дуплексное соединение, чтобы заставить пользователя (или клиентское приложение) для периодических вызовов к серверу, которые проверяют, есть ли новые данные или нет.Я хочу, чтобы сервер передавал любые новые данные клиенту.
[ServiceContract]
public interface IDuplexClient
{
[OperationContract(IsOneWay = true)]
void DiplayMessage(string message);
[OperationContract(IsOneWay = true)]
void DisplayUserList(ObservableCollection<User> userColl);
}
А вот и контракт на обслуживание.Честно говоря, я не знаю, насколько это актуально, но выкладываю на всякий случай.