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

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

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

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

Решил сделать небольшое клиент серверное приложение (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
4434 / 2094 / 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
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:16
Вот держи. Разберись с зависанием, это из-за колбека. У меня сейчас нет времени разбираться, но эта проблема решаема и я с ней сталкивался.

Неплохо да, 27 килобайт, твой же проект и ты выложил 15 мегабайт
Вложения
Тип файла: rar TestWcf.rar (27.7 Кб, 4 просмотров)
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 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
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
07.06.2015, 23:43
Вот лови чуть исправлено, по крайней мере колбек приходит и не зависает.
Вложения
Тип файла: rar TestWcf.rar (71.8 Кб, 8 просмотров)
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru