|
Модераторы: Partizan, gambit |
|
mrblack2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.6.2009 Репутация: нет Всего: нет |
Есть непонятная проблема с десериализацией из сетевого потока. На клиентской стороне происходит сериализация класса с данными в сетевой поток. На стороне сервера при подключении клиента открывается поток чтения данных с клиента:
На строке десериализации программа останавливается. Если следом приходит следующий пакет возникает эксепшен (ошибка в XML). Нормально продолжается только в случае закрытия соединения клиентом, что недопустимо т.к. предпологается двухсторонний обмен данными с клиентом в течении продолжительного времени. Вариант когда из потока чтение делается в массив байт с последующим его преобразованием в поток памяти (memory stream) и десериализацией работает нормально. Что с сетевым потоком не так? |
|||
|
||||
Bogdan1024 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Может при отправке не делается Flush и поэтому всё посылается разу только когда поток закрывается?
-------------------- |
|||
|
||||
Enteropoly |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 50 Регистрация: 17.6.2009 Репутация: нет Всего: нет |
Вообще, предлагаю тебе разбить это дело на два этапа, т.е. остановиться на "Варианте когда из потока чтение делается в массив байт с последующим его преобразованием в поток памяти (memory stream) и десериализацией." Возможно, потому, что десериалайзеру требуется полный, готовый объект, и влёт он проворачивать подобные операции неспособен.
А ещё можно попробовать вместо XML использовать бинарный сериалайзер (если это не критично). |
|||
|
||||
mrblack2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.6.2009 Репутация: нет Всего: нет |
Так в сетевом потоке и лежит полный объект. Ведь когда я читаю методом Read синхронным никаких задержек не происходит, все читается сразу. Правда в Read я передаю кол-во байт для чтения, которое узнаю из свойства "Available" TCP клиента... Бинарная сериализация не подходит, т.к. сказать по условию задачи. Добавлено через 1 минуту и 34 секунды
У networkstream нет метода Flush() |
||||
|
|||||
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |