Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407

Клиент-серверное приложение для работы с MySql

04.09.2024, 14:03. Показов 1091. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Все свои приложения я писал с прямой связью между клиенским приложением и бд, но безопасность в таких приложениях не очень-то хорошая, подключения не зашифровать, данные юзера тоже, выяснил, что для какой-то безопасности нужна прослойка между клиентом и бд, начал разбираться в теме, и столкнулся с тем что не очень понимаю общую структуру. Отсюда несколько вопросов:
  1. чем оличается web api от tsp сервера?
  2. Как вообще организуется связь между клиентом и сервером?
    Я себе это примерно так представляю: клиент шлет название запроса + параметры запроса, а на сервере есть словарь с названиями запроса и соответствующих этому названию метод или делегат c sql запросом типо такого:
    C#
    1
    2
    3
    4
    5
    
    var words = new Dictionary<string, MyFunc>()
    {
        {"GetContainers", GetCon },
        {"connect", GetCon },
    };
    Ну и мы оттуда выбираем нужный выполняем sql запрос и отправляем обратно данные
  3. Нужно ли конвертировать данные в json при таком подходе(если он вообще имеет место быть) или просто придумывать протокол и по нему слать пакеты?

Ну и надо наверное немного приложение описать. Создается оно для работы в компании.
Общая суть такая: клиент авторизуется, и работает то с бд, вносит удаляет редактирует данные, таких клиентов может быть много, так же приложение может быть доступно вне локальной сети.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.09.2024, 14:03
Ответы с готовыми решениями:

Клиент-серверное приложение для обмена файлами между ПК
Здравствуйте! Я обращаюсь к вам для того чтобы вы мне подсказали что именно нужно знать и можно ли реализовать мою задачу на ЯП C#? ...

Как написать клиент-серверное приложение для управления COM портом
Здравствуйте, Написал в Visual Studio 2010 программу для работы с COM портом - отправка команд(байтов) на микроконтроллер подключенный к...

Клиент-серверное приложение для удаленного доступа к рабочему столу
Появилась идея создания клиент-серверного приложения, для удаленного доступа к рабочему столу. Создавать что то типа конференции, в которой...

17
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
04.09.2024, 14:16
Лучший ответ Сообщение было отмечено firnen_dragon как решение

Решение

У вас будет web api сервис, он будет связан с клиентом посредством http/https запроса, БД будет крутиться на сервере, какая там будет между ними прослойка не столь важно, можно использовать EF, можно прямое соединение не суть, сломать или пробросить что-то сводится к 0, т.к. для этого нужно взломать сам сервер на котором крутится ваш web api сервис. Что касаемо клиента, он может быть абсолютно любым: мобилка, десктоп, браузер и т.д. все общение сведется по сути к запросу и получению json в ответ

Добавлено через 3 минуты
Цитата Сообщение от firnen_dragon Посмотреть сообщение
а на сервере есть словарь с названиями запроса и соответствующих этому названию метод или делегат c sql запросом типо такого
Нет, на сервере будет контроллер, в котором будут методы, например нужно вернуть всех студентов:
C#
1
2
3
4
5
[HttpGet]
public async Task<IActionResult> GetAllStudents()
{
//todo: что-то делаем
}
Добавлено через 2 минуты
Цитата Сообщение от firnen_dragon Посмотреть сообщение
так же приложение может быть доступно вне локальной сети
Вне локальной сети, значит и клиент и сервер должны быть установлены на одной машине
1
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
04.09.2024, 14:20  [ТС]
Цитата Сообщение от Midian Посмотреть сообщение
web api сервис
А в чем раздница то между tsp сервером и web api то просто организацию многопоточного сервера я понимаю, мы просто открываем отдельный поток на отдельного клиента и там работаем, а посомотрев web api как?
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
04.09.2024, 14:25
Цитата Сообщение от firnen_dragon Посмотреть сообщение
таких клиентов может быть много
Все запросы на web api сервис выполняются в своем потоке, причем в браузере они все асинхронны, БД на сегодняшний день все умеют работать с множеством подключений

Добавлено через 3 минуты
Цитата Сообщение от firnen_dragon Посмотреть сообщение
А в чем раздница то между tsp сервером и web api
TCP - что это?
Протокол управления передачей (англ. TCP - Transmission Control Protocol) обеспечивает надежную доставку данных. Сервис TCP так и называется: reliable byte stream (надежная передача потока байт). Этот протокол отвечает за доставку данных и сохранение порядка передаваемых сообщений.

Поток может быть большим. Как же в этом случае работает протокол? Допустим, вы скачиваете файл, который весит несколько Гб. В протоколе поток будет разбиваться на сегменты, и каждый из этих сегментов - отправляться получателю. На стороне получателя все части снова собираются.

Чтобы обеспечить гарантию доставки данных, TCP использует подтверждение получения сообщений.

Как это работает?

От отправителя к получателю "уходит" некий сегмент данных.

Приняв этот сегмент, получатель посылает отправителю подтверждение (ACK или Acknowledgement).

Данный процесс повторяется, пока передаются данные.

А вот что происходит, если при передаче произошла ошибка: сегмент теряется в сети, не доходит до получателя, и подтверждение не отправляется. Со стороны отправителя есть таймер, который задает время ожидания подтверждения. По истечении этого времени и за неимением ACK сегмент отправляется повторно.

Вот только в протоколе TCP подтверждаются сразу несколько сегментов, которые отправляются друг за другом (механизм скользящего окна). В противном случае скорость обмена данными была бы ужасающе медленной.

В протоколе TCP также предусмотрена защита от дублирования и нарушения порядка сообщений (сообщения нумеруются).

Протокол HTTP
Мы видим HTTP в каждой ссылке: http://google.com/ и т.д.

Что это значит? HTTP - это протокол передачи гипертекста.

Грубо говоря, это тип разметки, которая добавляется в текстовые документы для определенного отображения текста. Например, в HTML используются теги. Так это выглядит в браузере, все знают.

В стеке протоколов HTTP находится на прикладном уровне.

Он использует протокол TCP и порт сервера 80 (для клиента порт генерируется операционной системой).

Режим работы HTTP - запрос-ответ: клиент посылает серверу запрос на передачу web-страницы, после чего сервер пересылает эту страницу клиенту. При этом нет жестко заданного формата пакетов: используется текстовый режим.

Скопировал в сети, по сути разница в протоколах, выше описано что представляет каждый из них
1
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
04.09.2024, 14:53  [ТС]
Цитата Сообщение от Midian Посмотреть сообщение
HTTP - это протокол передачи гипертекста.
Спасибо, но зачем мне тогда HTTP, если мне передавать нужно то по сути только массивы объектов, которые на сколько я понял я могу передавать и без HTTP?

Добавлено через 2 минуты
Цитата Сообщение от Midian Посмотреть сообщение
Все запросы на web api сервис выполняются в своем потоке
То что каждый запрос выполняется ассинхронно это я понимаю, тут вопрос в потоке соединения, т.е. подключился клиент к примеру он авторизовался и работает себе пока поток соединения не будет завершен, а в web api как я пойму что конкретному клиенту сейчас можно выдавать нужную информацию если я уже не помню авторизован он или нет?
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
04.09.2024, 16:03
Цитата Сообщение от firnen_dragon Посмотреть сообщение
Спасибо, но зачем мне тогда HTTP, если мне передавать нужно то по сути только массивы объектов, которые на сколько я понял я могу передавать и без HTTP?
Ну на этом построен web api, он использует http протокол и данные передавать придется в виде json, при желании можно передать массив байт в виде Base64 строки и на веб сервере преобразовать обратно в массив байт
Цитата Сообщение от firnen_dragon Посмотреть сообщение
подключился клиент к примеру он авторизовался и работает себе пока поток соединения не будет завершен
а здесь вы создаете например HttpClient делаете запрос на сервер и ждете от него ответ, все это асинхронно и по выполнению запроса и получению ответа закрываете соединение

Добавлено через 3 минуты
Цитата Сообщение от Midian Посмотреть сообщение
массивы объектов
ну что мешает десериализировать массив объектов из json?
C#
1
var studentsList = JsonSerializer.Deserialize<List<Student>>(json);
Добавлено через 3 минуты
Почитайте что такое json, как с ним работать в .NET, почитайте про HttpClient, какие запросы бывают, как это работает и не будите задавать лишние вопросы, весь мир уже давно использует json, а не гоняет байты по TCP

Добавлено через 2 минуты
Цитата Сообщение от firnen_dragon Посмотреть сообщение
что конкретному клиенту сейчас можно выдавать нужную информацию если я уже не помню авторизован он или нет
Если нужно общаться еще с клиентом в обратном направлении, уведомлять его о каком-то событии, почитайте про SignalR, это как-раз про ваш случай
1
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
04.09.2024, 16:48  [ТС]
Midian, Спасибо, бульмень чет начал понимать, пошел я читать про api
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
04.09.2024, 19:28
Цитата Сообщение от Midian Посмотреть сообщение
ну что мешает десериализировать массив объектов из json?
учитывая что советуете работать с web api, там никто json не оперирует напрямую. Отправляются объекты и принимаются объекты. То что по факту он передается в виде json -- дело десятое.
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
05.09.2024, 10:17
Цитата Сообщение от Wolfdp Посмотреть сообщение
Отправляются объекты и принимаются объекты
Условно изменился список полей у объекта, что-то добавили, что-то убавили, твой объект на твоей стороне описанный не будет об этом ничего знать, недостающие поля станут null, а новых ты так и не увидишь. Я к примеру предпочитаю читать через JsonObject, причем достаю поля которые мне нужны и при желании могу увидеть все поля какие ко мне пришли, новые увижу и если было что-то удалено, то и в списке их не будет
0
Эксперт .NET
 Аватар для Usaga
14130 / 9350 / 1350
Регистрация: 21.01.2016
Сообщений: 35,148
05.09.2024, 10:29
Midian, в таком случае применяют версионирование API, а не ручное чтение json'ов.
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.09.2024, 10:58
Цитата Сообщение от Midian Посмотреть сообщение
Условно изменился список полей у объекта
Это в любом случае потянет изменение на клиентской стороне. То что я костылями могу увидить новые поля, не шибко помогает в вопросе "а что с ними делать".
0
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
05.09.2024, 11:34  [ТС]
Midian, Еще вопросик появился, разбираюсь в структуре net.core web api, и я не пойму где находится уровень логики, если мне допустим нужно что-то дополнительно вычислить или обработать, в контроллерах нельзя вроде как, в модели данных тоже, мне логику в сервисах писать нужно или как? Ну пример того что мне может понадобиться, подключение нейронки, шлю картинку она там обрабатывается потом по итогам длаем sql запрос и выплевываем клиенту то что получилось? Такое вообще логично писать в api?
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,731
Записей в блоге: 1
05.09.2024, 12:18
Цитата Сообщение от firnen_dragon Посмотреть сообщение
Midian, Еще вопросик появился
Не знаю можно ли ответить на вопрос другому, но тем не менее.
Цитата Сообщение от firnen_dragon Посмотреть сообщение
я не пойму где находится уровень логики
Если клиент ожидает от web api обработанный результат, то реализуйте рабочий слой на стороне web api. Вариантов реализации несколько и рассмотрим простейший. Клиент прислал запрос на картинку; контроллер принял запрос и вызвал метод(ы) рабочего слоя (ну там класс какой нибудь или целый сервис); тот, в свою очередь, что-то сделал с данными (отправил в нейронку) и вернул результат; контроллер при необходимости преобразует результат и пуляет клиенту в качестве ответа.

Добавлено через 3 минуты
Цитата Сообщение от firnen_dragon Посмотреть сообщение
а в web api как я пойму что конкретному клиенту сейчас можно выдавать нужную информацию если я уже не помню авторизован он или нет?
В заголовке запроса клиента к web api внедряют токен доступа. web api извлекает токен, проверяет его и если всё гуд, то обрабатывает запрос иначе выплёвывает ошибку и всё на этом.
1
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
05.09.2024, 12:47  [ТС]
Цитата Сообщение от Uswer Посмотреть сообщение
реализуйте рабочий слой
Спасибо, а рабочий слой с контроллером связан явно? или как в wpf надо уведомлять о том что данные модели изменились через кастомное событие или INotifyPropertyChanged?
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.09.2024, 13:58
Цитата Сообщение от firnen_dragon Посмотреть сообщение
Спасибо, а рабочий слой с контроллером связан явно? или как в wpf надо уведомлять о том что данные модели изменились через кастомное событие или INotifyPropertyChanged?
Вы сейчас про серверную часть или клиентскую?
0
 Аватар для firnen_dragon
25 / 25 / 4
Регистрация: 21.01.2019
Сообщений: 407
05.09.2024, 15:11  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Вы сейчас про серверную часть или клиентскую?
Серверную
0
 Аватар для Midian
606 / 388 / 198
Регистрация: 31.03.2013
Сообщений: 2,689
05.09.2024, 16:13
Цитата Сообщение от firnen_dragon Посмотреть сообщение
Еще вопросик появился, разбираюсь в структуре net.core web api, и я не пойму где находится уровень логики, если мне допустим нужно что-то дополнительно вычислить или обработать, в контроллерах нельзя вроде как, в модели данных тоже, мне логику в сервисах писать нужно или как? Ну пример того что мне может понадобиться, подключение нейронки, шлю картинку она там обрабатывается потом по итогам длаем sql запрос и выплевываем клиенту то что получилось? Такое вообще логично писать в api?
Можно прямо в web api, а можно вынести даже в отдельный сервис, о котором будет знать только web api и дергать его будет только он ожидая ответа и потом уже web api отдаст готовый результат клиенту, тут уж как угодно, если что-то жирное и требует ресурсов, то лучше вынести в отдельный контейнер docker и дергать его

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
в таком случае применяют версионирование API, а не ручное чтение json'ов.
либо вариант еще использовать одну Core библиотеку, там где будут описаны все эти типы, ну это если приложение пишется на C#, а если там будут разные приложухи типа C++, Python, и т.д., тогда уже да, версионность спасет
1
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
05.09.2024, 16:25
firnen_dragon, MVVM применяется только в клиентской части, на серверной он не применим априори (внезапно на ней нет слоя View). Взаимодействие с WEB API оперирует понятиями Request-Response. На клиентской части обычно делают слой WebApiService, который инкапсулирует запросы на сервер. На самом сервисе API методы в идеале стоит делать тонкими, т.е. они должны вызывать внутрений сервис/репозитори/менеджер/провайдер с нужными параметрами и формировать ответ. Опционально валидировать входящие данные и креды.

В целом если по незнанию сделаете "толстый" api метод, то не смертельно. Просто это нереюзабельно и не покрывается тестами, скорее всего вам сейчас это не смертельно.

Не по теме:

Цитата Сообщение от Midian Посмотреть сообщение
то лучше вынести в отдельный контейнер docker и дергать его
Ужс...

2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.09.2024, 16:25
Помогаю со студенческими работами здесь

Создать клиент-серверное приложение для трансляции картинки с web камеры
Доброго денечка :) Есть проект с подключением web камеры с использовавшем библиотеки AForge. Все хорошо камера врубается, картинка...

Клиент-серверное приложение: как определить, что сервер/клиент не отвечает в течении определенного времени
Пишу клиент-серверное приложение. Использую TCPListener и TCPClient. Вопрос: как определить что сервер(клиент) не отвечает в течении...

Клиент серверное приложение ADO.net - mysql
Доброго времени суток! не знаю в какую тему написать - вопрос такой у меня приложение на c# обменивается с мускл данными в utf8 в базе...

Cоздать клиент-серверное приложение для тестирования
Нужно создать клиент-серверное приложение для тестирования, например клиент подключается к серверу сервер предлагает пройти тест, как...

Написать клиент-серверное приложение для взаимодействия через интернет
Здравствуйте. Нужно написать приложение сервер и соответствующее ему клиент, для взаимодействия через интернет. В локальной сети(между...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru