kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Paul
Paul
Вопрос

Возможно ли возвращать объекты из WebService?

Вместо того чтобы возвращать обычную строку, есть ли способ возвращать классические объекты? Если нет: каковы лучшие практики? Переводите ли вы объект в xml и перестраиваете его с другой стороны? Каковы другие возможности?

6 2008-08-15T01:51:48+00:00 11
 Chris
Chris
Редактировал вопрос 23-го августа 2008 в 6:41
Программирование
web-services
Решение / Ответ
 lomaxx
lomaxx
15-го августа 2008 в 2:23
2008-08-15T02:23:16+00:00
Дополнительно
Источник
Редактировать
#8415581

Как уже говорилось, в .net это можно сделать с помощью сериализации. По умолчанию все нативные типы являются сериализуемыми, поэтому это происходит автоматически.

Однако если у вас есть сложные типы, вам нужно пометить объект атрибутом [Serializable]. То же самое касается сложных типов в качестве свойств.

Так, например, вам нужно иметь:

[Serializable]
public class MyClass
{
    public string MyString {get; set;}

    [Serializable]
    public MyOtherClass MyOtherClassProperty {get; set;}
}
7
0
 Kev
Kev
15-го августа 2008 в 1:57
2008-08-15T01:57:01+00:00
Дополнительно
Источник
Редактировать
#8415580

Если объект может быть сериализован в XML и может быть описан в WSDL, то да, можно возвращать объекты из веб-сервиса.

5
0
Jon Limjap
Jon Limjap
15-го августа 2008 в 1:56
2008-08-15T01:56:31+00:00
Дополнительно
Источник
Редактировать
#8415579

Да: в .NET это называется сериализацией, когда объекты сериализуются в XML и затем реконструируются потребляющим сервисом обратно в исходный тип объекта или суррогат с той же структурой данных.

3
0
 Brian
Brian
15-го августа 2008 в 3:22
2008-08-15T03:22:56+00:00
Дополнительно
Источник
Редактировать
#8415584

Возможно возвратить объекты из веб-сервиса, используя XML. Но веб-сервисы, как предполагается, являются агностиком операционной системы и платформой. Преобразование в последовательную форму объекта просто позволяет Вам хранить и восстанавливать объект от потока байта, такого как файл. Например, Вы можете преобразовать в последовательную форму Явский объект, преобразовать тот двойной поток (возможно, через Основу 64 кодирования в область CDATA) и передача это к service' s клиент.

Но клиент только был бы в состоянии восстановить тот объект, если бы это находилось на Яве. Кроме того, глубокая копия требуется, чтобы преобразовывать в последовательную форму объект и восстанавливать его точно. Глубокие копии могут быть дорогими.

Ваш оптимальный маршрут должен создать схему XML, которая представляет документ, и создайте случай той схемы со специфическими особенностями объекта.

2
0
Matthew Schinckel
Matthew Schinckel
15-го августа 2008 в 2:26
2008-08-15T02:26:02+00:00
Дополнительно
Источник
Редактировать
#8415583

Где возможно, я перемещаю объекты в XML - это означает, что веб-сервис более портативный - я могу тогда получить доступ к обслуживанию на любом языке, я просто должен создать транспроблему анализатора/объекта на том языке.

Поскольку у нас есть файлы WSDL, описывающие обслуживание, это почти автоматизировано в некоторых системах.

(Например, нам написали сервер у чистого питона, который заменяет сервер, написанный в C, клиент, написанный в C ++/gSOAP и клиенте, написанном в Cocoa/Objective-C. Мы используем soapUI в качестве структуры тестирования, которая написана на Яве).

2
0
 Seibar
Seibar
15-го августа 2008 в 2:24
2008-08-15T02:24:07+00:00
Дополнительно
Источник
Редактировать
#8415582

.NET автоматически делает это с объектами, которые являются сериализуемыми. I' m вполне уверенная Ява работает тот же путь.

Вот статья, которая говорит о сериализации объекта в.NET: http://www.codeguru.com/Csharp/Csharp/cs_syntax/serialization/article.php/c7201

1
0
 lomaxx
lomaxx
15-го августа 2008 в 3:31
2008-08-15T03:31:00+00:00
Дополнительно
Источник
Редактировать
#8415586

@Brian: Я don' t знают, как вещи работают на Яве, но в .net объекты преобразованы в последовательную форму вниз к XML, не base64 последовательности. Веб-сервис издает wsdl файл, который содержит метод и определения объекта, требуемые для Вашего веб-сервиса.

Я надеялся бы, что никто не создает веб-сервисы, которые просто создают последовательность base64

1
0
Daniel Auger
Daniel Auger
21-го августа 2008 в 3:31
2008-08-21T15:31:53+00:00
Дополнительно
Источник
Редактировать
#8415589

Даниэль Оже:
Как другие сказали, это возможно. Однако, если и обслуживание и клиент использует объект, который имеет точно то же самое поведение области на обоих стороны, Вы, вероятно, didn' t нужен a обслуживание во-первых.

lomax: я должен не согласиться с этим как it' s a несколько узкий комментарий. Используя a веб-сервис, который может преобразовать в последовательную форму область объекты к XML означают, что он делает его легкий для клиентов та работа с те же объекты области, но это также означает то, что те клиенты ограничены использование, что конкретный веб-сервис you' ve выставил, и он также работает в перемена, позволяя другим клиентам не знайте о своей области объекты, но все еще взаимодействуют с Вашим обслуживание через XML.

Ломакс: You' ve описал два сценария. Сценарий 1: Клиент повторно гидратирует xml сообщение назад в тот же самый объект области. Я полагаю, что это " возвращение object". по моему опыту, это - плохой выбор и I' ll объясняют это ниже. Сценарий 2: Клиент повторно гидратирует xml сообщение во что-то другое, чем тот же самый объект области: Я - 100% позади этого, однако я don' t полагают, что это возвращает объект области. It' s, действительно посылая сообщение или DTO.

Теперь позвольте мне объяснить, почему true/pure/not DTO сериализация объекта через веб-сервис обычно плохая идея. Утверждение: чтобы сделать это во-первых, Вы или должны быть владельцем и клиента и обслуживания, или предоставить клиенту библиотеку, чтобы использовать так, чтобы они могли повторно гидратировать объект назад в it' s истинный тип. Проблема: Этот объект области как тип теперь существует в и принадлежит двум полусвязанным областям. Со временем поведения, возможно, должны быть добавлены в одной области, которые не имеют никакого смысла в другой области, и это приводит к загрязнению и потенциально болезненным проблемам.

Я обычно дефолт к сценарию 2. Я только использую сценарий 1, когда есть подавляющая причина сделать так.

Я приношу извинения за то, что был настолько кратким с моим начальным ответом. Я надеюсь, что это убирает вещи в известной степени до того, каково мое мнение. Ломакс, это казалось бы нами, половина соглашается;).

Daniel Auger
Daniel Auger
Редактировал ответ 21-го августа 2008 в 3:37
1
0
 Brendan
Brendan
21-го августа 2008 в 4:15
2008-08-21T16:15:26+00:00
Дополнительно
Источник
Редактировать
#8415590

JSON - довольно стандартный способ передать объекты в сети (как подмножество JavaScript). Много языков показывают библиотеку, которая преобразует кодекс JSON в родной объект - посмотрите, например simplejson в Пайтоне.

Для большего количества библиотек для использования JSON посмотрите интернет-страница JSON

1
0
Daniel Auger
Daniel Auger
18-го августа 2008 в 2:21
2008-08-18T02:21:44+00:00
Дополнительно
Источник
Редактировать
#8415587

Как другие сказали, это возможно. Однако, если и обслуживание и клиент используют объект, у которого есть то же самое поведение области с обеих сторон, Вы, вероятно, didn' t нужно обслуживание во-первых.

0
0
 lomaxx
lomaxx
19-го августа 2008 в 1:43
2008-08-19T01:43:35+00:00
Дополнительно
Источник
Редактировать
#8415588

Как другие сказали, это возможно. Однако, если и обслуживание и клиент использует объект, который имеет точно то же самое поведение области на обоих стороны, Вы, вероятно, didn' t нужен a обслуживание во-первых.

Я должен не согласиться с этим как it' s несколько узкий комментарий. Используя веб-сервис, который может преобразовать в последовательную форму объекты области к XML, означает, что он облегчает для клиентов, которые работают с теми же объектами области, но это также означает, что те клиенты ограничены использованием что конкретный веб-сервис you' ve выставил, и он также работает наоборот, позволяя другим клиентам не знать о Ваших объектах области, но все еще взаимодействовать с Вашим обслуживанием через XML.

0
0
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Денис Васьков
Зарегистрирован 16 часов назад
2
Dima Patrushev
Зарегистрирован 2 дня назад
3
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
4
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
5
Иван Степанюк
Зарегистрирован 1 неделю назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией