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

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

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

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

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

Прикрепил тестовый проект с тем что пытался сделать
Вложения
Тип файла: rar TestWcf.part01.rar (9.00 Мб, 4 просмотров)
Тип файла: rar TestWcf.part02.rar (6.88 Мб, 4 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2015, 18:46
Ответы с готовыми решениями:

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

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

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

7
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
07.06.2015, 15:12
дуплексные каналы, каллбеки
можно сервис делать центром обработки - все изменения идут в него, потом от него идут каллбеки которые ловят все клиенты(включая того кто менял) и обновляют интерфейс
но для сложных данных со связями это не особо подойдет
1
Эксперт .NET
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 22:58
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
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:16
Вот держи. Разберись с зависанием, это из-за колбека. У меня сейчас нет времени разбираться, но эта проблема решаема и я с ней сталкивался.

Неплохо да, 27 килобайт, твой же проект и ты выложил 15 мегабайт
Вложения
Тип файла: rar TestWcf.rar (27.7 Кб, 4 просмотров)
0
Эксперт .NET
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:41
Посмотри тут как сделано. Тут ничего не зависает.
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
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:43
Вот лови чуть исправлено, по крайней мере колбек приходит и не зависает.
Вложения
Тип файла: rar TestWcf.rar (71.8 Кб, 8 просмотров)
0
Эксперт .NET
 Аватар для Casper-SC
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:44
http://www.codeproject.com/Art... e-Entities
1
48 / 48 / 11
Регистрация: 13.08.2012
Сообщений: 97
08.06.2015, 05:27  [ТС]
Спасибо за помощь!
Мне посоветовали в сторону WCF Data Service (oData) посмотреть, пытаюсь разобраться.

Casper-SC, SpongeBob я в твоей теме смотрел вот только он у меня на VS2013 не сгенерировал Data, Core, как должно быть в видео, а разбираться времени небыло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2015, 05:27
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Анализ и линтинг кода JavaScript: ESLint, Prettier и JSHint
run.dev 26.04.2025
JavaScript прошёл долгий путь от простого языка для анимации веб-страниц до основы современной веб-разработки. С ростом сложности приложений, увеличением кодовых баз и масштабированием команд. . .
Паттерны в Python: Singleton, Factory и Observer
py-thonny 26.04.2025
Паттерны проектирования — это проверенные временем решения типовых проблем разработки программного обеспечения. Их история берёт начало с книги "Приёмы объектно-ориентированного проектирования. . . .
Исключения в C#: Stack Overflow, Access Violation и Out of memory
stackOverflow 26.04.2025
Исключения в C# — это не только механизм оповещения о проблемах, а целое искусство управления потоком выполнения программы в экстремальных ситуациях. Обычное исключение, например,. . .
Логирование в C# ASP.NET Core с помощью Serilog, ElasticSearch, Kibana
stackOverflow 25.04.2025
Помните те времена, когда для анализа проблемы приходилось подключаться к серверу, искать нужный лог-файл среди десятков других и вручную фильтровать тысячи строк в поисках ошибки? К счастью, эти дни. . .
Структура "железный OnKeyUp" вместо антидребезга. Полностью асинхронный счётчик.
Hrethgir 25.04.2025
Программа для симуляции схемы - Logisim Evolution В общем какое-то время отвлёкся, так было надо, теперь когда запилю это на verilog и FPGA , досоставлю заявку в ФИПС на полезную модель - не готов. . .
Автоматизация Amazon Web Services (AWS) с Boto3 в Python
py-thonny 25.04.2025
Облачные вычисления стали неотъемлемой частью современной ИТ-инфраструктуры, а Amazon Web Services (AWS) занимает лидирующие позиции среди провайдеров облачных услуг. Управление многочисленными. . .
Apache Kafka vs RabbitMQ в микросервисной архитектуре
ArchitectMsa 25.04.2025
Современная разработка ПО всё чаще склоняется к микросервисной архитектуре — подходу, при котором приложение разбивается на множество небольших, автономных сервисов. В этой распределённой среде. . .
Параллельное программирование с OpenMP в C++
NullReferenced 24.04.2025
Параллельное программирование — подход к созданию программ, когда одна задача разбивается на несколько подзадач, которые могут выполняться одновременно. Оно стало необходимым навыком для. . .
Цепочки методов в C# с Fluent API
UnmanagedCoder 24.04.2025
Современное программирование — это не только решение функциональных задач, но и создание кода, который удобно поддерживать, расширять и читать. Цепочки методов и Fluent-синтаксис в C# стали мощным. . .
Мульти-тенантные БД с PostgreSQL Row Security
Codd 23.04.2025
Современные облачные сервисы и бизнес-приложения всё чаще обслуживают множество клиентов в рамках единой программной инфраструктуры. Эта архитектурная модель, известная как мульти-тенантность, стала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru