Большие, сложные объекты как результат веб-сервиса
Здравствуйте, дамы и господа!
Хорошо, следуя моему другому вопросу о результатах веб-службы ASP.NET, классах прокси и преобразовании типов. Я пришел к участию в моем проекте, где мне нужно надеть свою мысленную шапку.
По сути, у нас есть большой, сложный пользовательский объект, который необходимо вернуть из веб-службы и использовать в клиентском приложении.
Теперь, основываясь на предыдущем обсуждении, мы знаем, что это примет форму прокси-класса (ов) в качестве возвращаемого типа. Чтобы преодолеть это, нам нужно в основном скопировать свойства из одного в другое.
В этом случае это то, что я бы действительно, действительно, действительно! хотел бы избежать!
Итак, это заставило меня задуматься, как еще мы можем это сделать?
Мои нынешние мысли состоят в том, чтобы включить объект для полной сериализации в XML, а затем вернуть XML в виде строки из веб-службы. Затем мы десериализуем на клиенте. Это будет означать значительную часть украшения атрибутов, но, по крайней мере, код на обеих конечных точках будет легким, а именно путем использования.NET XML Serializer.
Что вы думаете об этом?
4 ответа
Сериализация.Net XML (de) довольно хорошо реализована. Сначала я не думаю, что это плохая идея.
Если два приложения импортируют одно и то же определение (я) класса (ов) C#, то это относительно хороший способ получить поведение конструктора копирования бесплатно. Если структура класса изменится, то все будет работать, когда обе стороны получат новое определение класса, без необходимости вносить какие-либо дополнительные изменения в сторону потребления / конструирования веб-службы.
При маршалинге и демаршаллинге XML есть небольшие накладные расходы, но это, вероятно, превосходит накладные расходы на вызов удаленного веб-сервиса. XML-сериализация.Net хорошо понятна большинству программистов и должна создавать простое в обслуживании решение.
Я люблю JSON
для такого рода вещей. Я только что закончил POC-портал для моей компании, используя jQuery
обращаться к веб-сервисам с включенным скриптовым сервисом. Сообщения легки и разбираются, и т.д. в значительной степени обрабатываются. jQuery ajax
вещи, которые я прочитал, были здесь (любите это!): jquery ajax статья
Вчера у меня были отличные ответы на очень похожую тему, которые могут быть вам полезны:
Роб, если посмотреть на ваш другой вопрос, а также на этот, это звучит как точная ситуация, в которой мы оказались. Однако мы перешли от веб-служб ASP.Net к веб-службам WCF и в процессе решения (по большей части) этой проблемы.
Если есть шанс, что ваш веб-сервис может быть реализован как веб-сервис WCF, это может сработать и для вас. Следует отметить, что в то же время мы поддерживали обратную совместимость с некоторыми клиентскими приложениями, которым требуется реализация "стиля веб-службы ASP.Net" с использованием привязки WCF basichttp для транспорта службы. Конечный результат заключается в том, что наши "новые" клиентские приложения могут использовать наши реальные бизнес-объекты (посредством ссылки на сборку, содержащую только эти общие объекты) в качестве типов возврата из вызовов веб-службы, поскольку они выполняют реальные вызовы WCF.
Мы делаем это, не используя автоматически сгенерированные прокси-классы и создавая собственный клиентский канал для связи со службой WCF.
Если вы можете использовать WCF, дайте мне знать, что я могу опубликовать дополнительную информацию.