![]() |
|
Модераторы: gambit |
![]()
|
|
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Суть:
Серверная прога на сервере подключается к базе данных(тут вопросов пока нет) Клиенты - админмашина(через интрефейс клиентской проги осуществляет наполнение базы данных - (имеется в виду в ручную)через серверную прогу - диспетчера(реальные люди) в режиме реального времени через интрефейс клиентской проги постоянно обращаются к базе через серверную программу (считывают данные, и постоянно обновляют таблицу журнала принятых звонков). Посоветовали при интенсивном обмене данных использовать Remoting. Скачал простенький пример - вроде кое-что понятно - ковыряюсь. Текущий вопрос: В примере клиент серверу отправлял тесктовые сообщения. Как можно организовать обмен данными sql таблицы? --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Также как в примере, только в прокси-классе объявляешь методы, выполняющие запросы к БД, в клиентском приложении вызываешь эти самые методы... -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Как узнать IP клиента в REmoting?
--------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
На все 100 не уверен, но посмотри:
System.Net.NetworkInformation и System.Net.HttpListener.HttpListenerRequest и еще, слышал, что клиент не обязан свой айпишник сообщать серверу, поэтому, мне думается, лучше использовать авторизацию -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| CityAC |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Наверно откажусь от Remoting в пользу XML сериализации.
Меня убедили не использовать каркас. Только вот что не могу понять. Объект DataSet можно сериализовать, а на DataRow ругается.(вроде как (мой перевод)в этом типе не присутствует коструктор без параметров) - что это значит? Но если даже передаватьобъект DataSet, то как это делается? Везде примеры сериализации в xml файл. А как его пустить по сетевому потоку? Типа как в NetworkStream при бинарной сериализации? Может я не ту сторону смотрю. Короче говоря нужно с сервера отправить клиенту строку из базы SQL Строка получается в формате DataRow я ее вытягиваю из из объекта DataSet
Какая ф-ция возвращает объект Stream, который используется в XML сериализации? Как например это делается в следующем коде для NetworkStream
Это сообщение отредактировал(а) CityAC - 20.9.2007, 10:18 --------------------
Вижу цель, не вижу припятствий. |
||||
|
|||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
WebRequest.GetRequestStream(); XmlTextWriter запишет твои данные хоть в какой стрим, файловый или сетевой... Данные можно сериализовать в XmlTextWriter , или напрямую в сетевой стрим. -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Ошибка: An object reference is required for the nonstatic field, method, or property 'System.Net.WebRequest.GetRequestStream()' Вообщето я в локальной сети данные передаю. А эта ф-ция для записи данных в Интернет ресурс Какой класс вызывает эту ф-цию для локалки ? Это сообщение отредактировал(а) CityAC - 20.9.2007, 11:11 --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
А как называется сетевой стрим? --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| Experimenter |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
CityAC, без бутылки не разберешься, код в студию...
Сетевой обмен даже на единственной отключенной от сетки машине между двумя приложениями можно организовать через System.Net (на localhost, к примеру)
Извини, что не разжевал, WebRequest напрямую не используют:
вот так надо. Это сообщение отредактировал(а) Experimenter - 20.9.2007, 12:03 -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
||||||
|
|||||||
| CityAC |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Как это сделать ума не приложу Следующая строка не катит. Ну не хочет он создавать XmlSerializer для объекта DataRow
Это сообщение отредактировал(а) CityAC - 20.9.2007, 12:31 --------------------
Вижу цель, не вижу припятствий. |
||||||
|
|||||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Как это ни печально, DataRow не подлежит сериализации, так как не имеет публичного конструктора. С сериализацией только на первый взгляд все просто, на самом деле там много подводных камней. Но можно сериализовать DataSet или DataTable Это сообщение отредактировал(а) Experimenter - 20.9.2007, 13:23 -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Ну насчет DAtaRow - да, я залез в дебри- но нашел выход.
Создаю DataSet,помещая в него не всю таблицу а только нужную строку и затем передаю ее в составе DataSet. а что насчет этой ошибки? Это сообщение отредактировал(а) CityAC - 20.9.2007, 13:29 --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| Experimenter |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Так попробуй, и если не поможет, поиграйся со свойствами webreq, их у него много, полезных и бесполезных. -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
||||
|
|||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
спасибо за ответы Пока ничего не получилось - буду пробовать дальше.
Последний совет помог!!! Это сообщение отредактировал(а) CityAC - 20.9.2007, 13:59 --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
ты скромничаешь, выкладывай, какие ошибки, помогу тебе как многодетный отец многодетному отцу. Чем смогу, конечно... -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
http://gzip.rsdn.ru/article/dotnet/DotNetSerial.xml
и http://www.gotdotnet.ru/LearnDotNet/NETFramework/491563.aspx почитай на досуге -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
У меня бабушка родом из Давлеканово. Был там в 5 лет у прабабки. Так что может мы еще и родственники - мир тесен говорят. --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Ну что едем дальше.
Поток создается, в него загружается XML таблица (таблица с одной строкой), (если можно сериализовать таблицу, то зачем DataSet! - понял по твоей подсказке) А как на стороне клиента организовать запрос? Добавлено через 1 минуту и 49 секунд Покой нам только снится Так что буду читать прям щас. Это сообщение отредактировал(а) CityAC - 20.9.2007, 15:12 --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Ну если времени нет, то можно вообще без сериализации обойтись, главное, чтоб сервер клиентские запросы распознавал правильно
Клиент, которым я часто пользуюсь для тестирования сетевых приложений:
Вот вроде бы и все... -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Это сервер - готов отправлять. Это сообщение отредактировал(а) CityAC - 20.9.2007, 19:03 --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| Experimenter |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Ясен перец, не пройдет, надо чтоб сервер слушал тот порт. Это ж пример!!!
Это клиент! Или я недоврубился? Добавлено через 10 минут и 21 секунду На сервере HttpListener поднимают -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
||||
|
|||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Называется ПРИЕХАЛИ!
клиента я написал такого как ты мне прислал (тот что ты используешь для тестирования сетевых приложений) Тогда получается как написать на стороне сервера? Че то я в край запутался. На сервере формируется таблица с одной строкой.И эту таблицу нужно отправить на клиента А если клиент редактирует эту строку, то ее нужно будет отправить назад на сервер Получается что клиент должен слушать сервер и сервер должен слушать клиента. Это сообщение отредактировал(а) CityAC - 20.9.2007, 19:40 --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| Experimenter |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Клиент это тот, кто шлет запросы
Сервер - тот, кто их обрабатывает и отсылает ответы На Сервере обычно ставят асинхронный слухач. Эх... Есть тоже пример, но он сырой, додумай сам
В данном случае HttpListenerRequest - это данные, пришедшие от клиента, у него тоже есть стрим (свойство InputStream). В ответ нужно клиенту отправить OutputStream класса:
В данном случае это два простейших приложения (с Клиентом), их еще нужно шлифовать и шлифовать под себя. Доходчиво? -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
||||
|
|||||
| Experimenter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 430 Регистрация: 8.5.2007 Где: Уфа Репутация: 1 Всего: 17 |
Три добавления:
1. Чтобы упростить задачу нужно к HttpWebRequest прилепить свойство ContentLength, в котором указываешь длину сообщения, на Сервере тогда можно задать массив байтов с этой длиной, чтоб слить данные из InputStream'а. Мне думается, так проще 2. Опять же, чтоб упростить задачу, вместо того, чтоб сериализовать таблицу с одной строкой, не проще ли эти данные слить в стринг с разделителями, например "data1@data2@data3"? Хотя это дело вкуса. 3. Не знаю, что приходит от клиента, но если мало данных (ок. 200 байт), тогда можно GET-запросы отправлять, еще проще... -------------------- public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){ if(zlo1 < zlo2) return zlo1; else if(zlo1 > zlo2) return zlo2; else throw new Exception("Kill yourself by the wall"); } |
|||
|
||||
| CityAC |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 3.11.2006 Где: Украина Горловка Репутация: нет Всего: 1 |
Качнул книгу .NET сетевое программирование для профессионалов.
Почитал про работу сокетов и асинхронное программирование. Все стало на свои места. Надо было с этого начать, чтоб не пугать людей своими вопросами. Завтра, вернее сегодня приду на работу, буду этот ворох, что нагородил в проге разгребать. Специально дома на инете сидел, чтоб вникнуть в суть(на работе ремонт офиса, интернета нет). Спасибо тебе Экспериментатор, как говорится направил, вывел в люди ну, пора и спать. --------------------
Вижу цель, не вижу припятствий. |
|||
|
||||
| artechve |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 26.9.2007 Репутация: нет Всего: нет |
Коллеи! подкиньте пож-та ссылок и примеров трехуровневых приложений.
и где можно почитать обзор как правильно делать 3L посредством .NET я хочу сделать 3L - приложение на .NET , но при этом не испольховать WEBServices, а только MTS/COM+ Это сообщение отредактировал(а) artechve - 26.9.2007, 15:47 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |