![]() |
|
Модераторы: gambit |
![]()
|
|
| HAL707 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: нет Всего: 4 |
Добрый день.
В общем пишу я программу для удаленного взаимодействия с БД. Решил использовать WCF для такого случая и уже об этом пожалел. Куча ошибок в местах, где они быть не должны имхо... Короче без лишних слов пример: dll с сервисом такая:
Для тестирования использую консольное приложения в котором создаю клиента и сервера.
Получаем такой эксепшн: Подключение к сокету было прервано. Возможно, это вызвано ошибкой обработки сообщения, превышением времени ожидания на удаленном узле или проблемой с выделенным сетевым ресурсом. В иннер эксепшн: Удаленный хост принудительно разорвал существующее подключение Что за черт вообще? Что не так? Я уж не говорю, что у ВЦФ есть такой прикол, что к нему из ВинФормс невозможно подключиться. Делал до этого сервис, тестил в винформс. Клиент не подключается с такой же ошибкой. Перенес на консоль (НИЧЕГО не менял) - все отлично работает... Что за муто ваще такая?? (через ремотинг все отлично кстати соединяется) |
||||
|
|||||
| mihryak |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
обычно такая ошибка говорит о проблемах сериализации
и это - чуть ли единственная, на мой взгляд, проблема wcf, ошибку можно было бы и посимпатичнее выдавать с другой стороны, это противоречило бы концепции Fault, в ней до пользователя не должны доходить исключения, раскрывающие техническую сторону сервиса. на сервисе же ошибку можно поймать в первозданном виде, надо только слегка потрудиться в общем, в твоём случае сериализция не проходит из-за "Cannot serialize the DataTable. DataTable name is not set." чтобы иметь возможность отлавливать подобные ошибки, существует интерфейс IErrorHandler добавь эти 2 класса
и выставь этот атрубут своему классу, реализующему контракт
это не так Это сообщение отредактировал(а) mihryak - 31.7.2009, 19:02 |
||||||
|
|||||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
кстати, необязательно использовать именно дефолтовый DataContractSerializer
так, например, можно контракту указать использовать XmlSerializer
|
|||
|
||||
| HAL707 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: нет Всего: 4 |
Насчет серализации - согласен. Поменял типы - все заработало.
Но с винформами все равно странности. Не работает, если клиент и сервис в одной программе.
Получаем простыню: Во время операции запроса в net.tcp://localhost:6669/MessageService ответ не был получен в течение настроенного времени ожидания (00:01:00). Время, назначенное для выполнения этой операции, может быть составной частью более длинного тайм-аута. Это может быть связано с тем, что служба продолжает обработать операцию, или с тем, что службе не удалось отправить ответное сообщение. Как это побороть? |
|||
|
||||
| mihryak |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 731 Регистрация: 28.4.2007 Где: С-Пб Репутация: 3 Всего: 36 |
это происходит по причине одновременного использования одного синхронизационного контекта и сервисом, и UI, соотв. и возникает блокировка вызова
читай тут там же указано и решение проблемы - выставить свойству UseSynchronizationContext атрибута ServiceBehavior в false
использование WCF имеет множество нюансов и, на первый взгляд, несуразных проблем, да и вообще - не такая уж и тривиальная штука но с появлением опыта его возможности не перестают удивлять |
|||
|
||||
| HAL707 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 109 Регистрация: 6.9.2007 Репутация: нет Всего: 4 |
Спасибо! Все понятно
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |