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

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

Решение

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

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

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

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

    [Serializable]
    public MyOtherClass MyOtherClassProperty {get; set;}
}
Комментарии (0)

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

Комментарии (0)

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

Комментарии (0)

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

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

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

Комментарии (0)

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

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

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

Комментарии (0)

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

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

Комментарии (0)

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

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

Комментарии (0)

Даниэль Оже:
Как другие сказали, это возможно. Однако, если и обслуживание и клиент использует объект, который имеет точно то же самое поведение области на обоих стороны, Вы, вероятно, 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, когда есть подавляющая причина сделать так.

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

Комментарии (0)

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

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

Комментарии (0)

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

Комментарии (0)

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

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

Комментарии (0)