![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
gORik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 23.10.2007 Репутация: нет Всего: нет |
Здравствуйте!
Начал разбираться с System.Net.Sockets - научился организовывать общение клиента с сервером посредством текстовых сообщений. Все вроде бы хорошо работает. Но пришла необходимость прикрутить к серверу БД. При работе з БД из серверного приложения проблем не возникает. Вопрос : как организовать общение между клиентом и сервером чтоб клиент мог отправить запрос скажем на выборку данных или удаление а сервер в ответ отдал клиенту набор даных или же результат исполнения операции. Грубо говоря как клиенту, обьяснить серверу что он хочет делать з БД?? отправлять sql-запрос как текст? или же отправлять какие то идентификаторы по которым формировать сам запрос на сервере?? Далее набор даных как отдавать клиенту? вроде би самый подходящий вариант xml? Ногами не бить ![]() Буду благодарен за примеры ![]() ![]() |
|||
|
||||
gORik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 23.10.2007 Репутация: нет Всего: нет |
Апдейт )
Получилось делать запрос на выборку.. Работает так : Клиент посылает запрос сервер обрабатывает и возвращает датасет. запрос клиенту идет в обычном string-формате, конвертируется в массив байтов и посылаться на сервер.. сервер деконвертирует в стринг выбирает данные пишет з датасета в хмл, потом в поток байтов и посылает клиенту. Как сделать чтоб клиент мог изменять данные и посылать их на сервер? То есть посылать обновленный датасет на сервер и сервер понимал что это датасет а не соообщение? как то специально обозначать первые пару байтов может быть? |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: нет Всего: 36 |
gORik,
Грубо говоря как клиенту, обьяснить серверу что он хочет делать з БД?? использовать клиент-серверную БД, которая умеет пускать к себе по tcp/ip |
|||
|
||||
gORik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 23.10.2007 Репутация: нет Всего: нет |
да, но нужна трехуровневая архитектура:
СУБД(MSSQLServer)<->Серверное приложение<->1...n Клиентских приложений... |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: нет Всего: 36 |
ох, уж эти преподы-затейники.. каждый раз что-нибудь новенькое выдумывают.
для коммуникации со вторым звеном используй .net remoting или web services, или ищи полноценный сервер приложений, наподобие jboss в java |
|||
|
||||
gORik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 23.10.2007 Репутация: нет Всего: нет |
Использую System.Net.Sockets, и вроде все не плохо получается вот только проблемы с форматом общения клиента с сервером..
Нада юзать что нить типа такого : превые 1-2 байта [идентификатор сообщения] далее несколько байт [подтверждение прав(пароль..)] далее [длина данных], а далее [сами данные] .. |
|||
|
||||
-Mikle- |
|
||||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 1 Всего: 59 |
Ну уж если действительно именно так нужно, то я, в подобных случаях, делал пакет-обертку, которая имеет такой формат (привожу упрощенно):
Prefix - некоторый набор байтов фиксированной длины, по которому определяется начало пакета. PackType - тип пакета. Перечисление, в котором ты определяешь тип пакета. Если упростить, то в перечисление можно закинуть все типы, например, SQLQuery, Error, OK, SQLResult, Disconnect, Ping, Pong и т.д. и т.п. ID - нужен для того, чтоб можно было организовать асинхронную работу с сервером. Если к серверу приходит пакет с ID=22, то он, когда данные готовы, должен отправить ответ в пакете с ID=22. BodyLength - длина тела пакета. Body - тело пакета. Тут уже шлешь непосредственно данные, в зависимости от типа пакета. PS:
На самом деле, архитектура СУБД(MSSQLServer)<->Серверное приложение<->1...n Клиентских приложений... не так уж и плоха. В некоторых случаях бывает полезной. -------------------- Если тебе плюют в спину, значит ты впереди... |
||||||
|
|||||||
gORik |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 23.10.2007 Репутация: нет Всего: нет |
Всем спасибо! разобрался
![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |