48 / 48 / 11
Регистрация: 13.08.2012
Сообщений: 97
1
.NET 4.x

Организовать совместную работу с обновлением данных на всех клиентах при изменении данных на одном

30.05.2015, 18:46. Показов 975. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Решил сделать небольшое клиент серверное приложение (MS SQL => WCF Services => WPF Client) и не знаю, как организовать совместную работу с обновлением данных на всех клиентах при изменении данных на одном клиенте.

Прикрепил тестовый проект с тем что пытался сделать
Вложения
Тип файла: rar TestWcf.part01.rar (9.00 Мб, 4 просмотров)
Тип файла: rar TestWcf.part02.rar (6.88 Мб, 4 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2015, 18:46
Ответы с готовыми решениями:

Организовать возможность ввода и обработки данных о клиентах и мастерах некоторого салона.
Очень нужна помощь по 4 и 5 пункту: {Задача: Организовать возможность ввода данных о клиентах и...

Как при изменении данных в одном справочнике перенести некоторые данные в него из другого справочника?
Подскажите пожалуйста! Возможно ли такое? Есть справочник "База контрагентов" так скажем,...

При изменении информации в одном документе изменить во всех других документах
Здравствуйте! Подскажите пожалуйста, можно ли сделать так, что бы при изменении информации в одном...

Запуск процедуры при изменении данных в диапазоне ячеек( трансляция данных через DDE сервер)
Запуск процедуры при изменении данных в диапазоне ячеек, данные меняются в течении всего рабочего...

7
1272 / 973 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
07.06.2015, 15:12 2
дуплексные каналы, каллбеки
можно сервис делать центром обработки - все изменения идут в него, потом от него идут каллбеки которые ловят все клиенты(включая того кто менял) и обновляют интерфейс
но для сложных данных со связями это не особо подойдет
1
Эксперт .NET
4431 / 2091 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 22:58 3
Gul-79, чуть не по теме, но всё же. Ты бы из папки packages удалил всё кроме repositories.config. И не забыл "Очистить решение". 15 метров. Жесть )))

Добавлено через 1 час 13 минут
Странный подход:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
        public IQueryable<People> GetPeoples()
        {
            return new DataPersonal().GetPeoples();
        }
 
        public void SaveChanges()
        {
            new DataPersonal().SaveChanges();
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public abstract class DataContext
    {
        public static PersonalModel Context { get; private set; }
 
        public void Connect()
        {
            try
            {
                if (Context == null)
                {
                    Context = new PersonalModel();
 
                    Database.SetInitializer(new CreatePersonalModel());
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }


----------------------------------
Почему не:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public class PersonalServer : IPersonalServer, IDisposable
    {
        private DataPersonal _dataPersonal;
 
        public PersonalServer()
        {
            _dataPersonal = new DataPersonal();
        }
 
        public IQueryable<People> GetPeoples()
        {
            return _dataPersonal.GetPeoples();
        }
 
        public void SaveChanges()
        {
            _dataPersonal.SaveChanges();
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public abstract class DataContext
    {
        public PersonalModel Context { get; private set; }
 
        public void Connect()
        {
            try
            {
                if (Context == null)
                {
                    Context = new PersonalModel();
 
                    Database.SetInitializer(new CreatePersonalModel());
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }


Добавлено через 30 секунд
PersonalServer не ты руками создавать должен, а за тебя инфраструктура WCF, нагородил ты там, я еле разобрался почему OperationContext.Current == null
0
Эксперт .NET
4431 / 2091 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:16 4
Вот держи. Разберись с зависанием, это из-за колбека. У меня сейчас нет времени разбираться, но эта проблема решаема и я с ней сталкивался.

Неплохо да, 27 килобайт, твой же проект и ты выложил 15 мегабайт
Вложения
Тип файла: rar TestWcf.rar (27.7 Кб, 4 просмотров)
0
Эксперт .NET
4431 / 2091 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:41 5
Посмотри тут как сделано. Тут ничего не зависает.
https://bitbucket.org/CasperSC/clientserverapp/src
Если будет время, завтра может быть помогу тебе, но ты тоже сам пробуй.

Иногда зависание вызывает такое обстоятельство:
Ты получаешь колбек и в этом же методе обращаешься к сервису.

Добавлено через 2 минуты
Точнее в этом же потоке.

Добавлено через 7 минут
Разобрался:
C#
1
2
    [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
    public class MainViewModel : ViewModelBase, IPersonalCallback
C#
1
2
    [ServiceContract]
    public interface IPersonalCallback
Добавлено через 28 секунд
C#
1
2
    [ServiceContract(CallbackContract = typeof(IPersonalCallback), SessionMode = SessionMode.Required)]
    public interface IPersonalService
C#
1
2
3
4
5
    [ServiceBehavior(
        ConcurrencyMode = ConcurrencyMode.Multiple,
        InstanceContextMode = InstanceContextMode.PerSession,
        UseSynchronizationContext = false)]
    public class PersonalService : IPersonalService, IDisposable
Добавлено через 3 минуты
С этой частью разбирись, чтобы получать айдишники изменённых объектов как-то
C#
1
2
3
4
5
6
7
8
9
            var modifiedIds = new List<string>();
            foreach (People people in _dataPersonal.Context.Peoples)
            {
                var entry = _dataPersonal.Context.Entry(people);
                if (entry.State != EntityState.Unchanged)
                {
                    modifiedIds.Add(people.Id.ToString());
                }
            }
0
Эксперт .NET
4431 / 2091 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:43 6
Вот лови чуть исправлено, по крайней мере колбек приходит и не зависает.
Вложения
Тип файла: rar TestWcf.rar (71.8 Кб, 8 просмотров)
0
Эксперт .NET
4431 / 2091 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:44 7
http://www.codeproject.com/Art... e-Entities
1
48 / 48 / 11
Регистрация: 13.08.2012
Сообщений: 97
08.06.2015, 05:27  [ТС] 8
Спасибо за помощь!
Мне посоветовали в сторону WCF Data Service (oData) посмотреть, пытаюсь разобраться.

Casper-SC, SpongeBob я в твоей теме смотрел вот только он у меня на VS2013 не сгенерировал Data, Core, как должно быть в видео, а разбираться времени небыло.
0
08.06.2015, 05:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2015, 05:27
Помогаю со студенческими работами здесь

Обновление данных из базы данных в клиентах в реальном времени
Здравствуйте, уважаемые коллеги! Как сделать то, что описано в теме? Расскажу с самого начала...

Как организовать работу приложения с базой данных?
Планируется: - написать приложение WinForm, которое будет работать с базой данных (например: кадры...

Организовать работу алгоритма получения данных по частям из ВКонтакте
Приветствую, ребята. Использую VK.NET. Интересует один вопросик, по организации алгоритма в...

Организовать работу с файлом: запись, сортировка, удаление данных
Прошу помощи в составлении программы на языке Паскаль. Условие задачи следующее: Разработать...

Как организовать работу с xml-файлом без потери данных?
Всем привет Имеется приложение, которое хранит свои настройки в xml-файле. Имеется отдельная...

В файле данных хранятся сведения о товарах продовольственной базы. Организовать работу с файлом
В файле данных хранятся сведения о товарах продовольственной базы в формате: &lt;наименование товара...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru