![]() |
|
Модераторы: gambit |
![]()
|
|
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Приветствую!
У меня наверняка ламерский вопрос. Если webMethod возвращает объект и мне нужно вызвать метод этого объекта, то он тоже должен быть WebMethod? Можно пример пожалуйста. Спасибо. С уважением, нейтрино. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| neutrino |
|
||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Детализирую ситуацию.
Есть класс А, который возвращается после выполнения
Класс А определен:
После того, как я генерирую прокси (с помощью wsdl), клиент не знает какие поля и методы есть у класса А (впрочем и в Web Reference тоже нет). Как можно вызвать А.getValue() ??? -------------------- The truth comes from within ... Покойся с миром, Vit |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
ИМХО, передавать A на клиент полностью, со всеми свойствами. Или же объявить А веб-сервисом, сгенерировать для него прокси и гонять этот прокси между клиентом и сервером -- что есть криво и к тому же придётся перед вызовом getValue устанавливать а.Url
-------------------- ![]() |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Как именно? Добавлено @ 19:03 Вернее интересует именно код. Все, что я пытался сделать не работало. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
neutrino, всё что нужно - добавить в класс конструктор без параметров (для десериализации), и у всех свойств кроме get завести ещё set (для сериализации в XML). Проверил на простом примере у себя:
MyService.cs
Class1.cs (его передаём на клиент)
Код клиента (веб-референс добавил под именем MyServiceProxy):
-------------------- ![]() |
||||||
|
|||||||
| neutrino |
|
||||||||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
mr.DUDA, премного благодарен за помощь, но... Можно я тебя еще подостаю?
done.
У меня нет свойств. Вот класс, который необходимо вернуть:
Сервис:
Если добавляешь веб-референс, то не нужно генерировать прокси wsdl-ом? Я добавил веб-референс и клиент видит класс CommandResponse, но нет у него никаких методов.
Так вот у response нет никаких методов. Добавлено @ 17:18 Кроме этих: Equals GetHashCode GetType ToString -------------------- The truth comes from within ... Покойся с миром, Vit |
||||||||||
|
|||||||||||
| neutrino |
|
||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
У меня есть какая-то общая проблема с сериализацией: ни один класс уменя нормально не сериализируется - нет его содержимого на клиенте. Разве недостаточно пометить все эти классы атрибутом [Serialized]?
И для чего нужен, например, атрибут [XmlInclude]? Я им пометил абстрактный класс CommandBase:
А потом каждую команду:
Добавлено @ 18:49 Господи! Я ничего не понимаю! -------------------- The truth comes from within ... Покойся с миром, Vit |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
neutrino, смотри:
- класс веб-сервиса выставляет наружу методы и свойства -- эти методы и свойства доступны на клиенте - класс веб-сервиса возвращает в методах некие return типы, каждый из которых должен быть полностью сериализуемым и не подразумевать дальнейший вызов серверных методов/свойств для получения их результата - возвращаемые значения должны быть сериализуемыми типами - в случае если заранее конкретный тип возвращаемого значения неизвестен, но наследует некий базовый тип (как у тебя в примере), то над базовым типом следует указать (с пом. XmlInclude для SOAP-сериализации) все типы наследуемые данным типом, чтобы десериализация прошла успешно; с точки зрения wsdl.exe, следует сгенерировать "распознаватель" типа по имени для всех указанных в XmlInclude типов. -------------------- ![]() |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Как? Я запускаю такую штуку: wsdl <хтмл-ссылка на веб-сервис> Но вроде тот прокси, который так генерируется не нужен, если я добавляю веб-референс на сервис. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
Вспомнил: для веб-сервисов надо юзать [SoapInclude] а не [XmlInclude]
-------------------- ![]() |
|||
|
||||
| neutrino |
|
||||||||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Кхммм... Странно...
Если поменять все XmlInclude на SoapInclude, то вылетает какой-то Exception (Не просто какой-то, а который говорит, что нет аттрибутов XmlInclude или SoapInclude):
Но если оставить XmlInclude, то сериализируется (сериализуется?) только название класса (в данном случае AddCommand):
Вот такой код: Сервис:
Класс CommandBase:
И, например, AddCommand как в том примере:
-------------------- The truth comes from within ... Покойся с миром, Vit |
||||||||||
|
|||||||||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
В примере из мсдн над веб-методом стоял ещё атрибут [SoapRpcMethod].
З.Ы. пойду учить матчасть -------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |