Большие, сложные объекты как результат веб-сервиса

Здравствуйте, дамы и господа!

Хорошо, следуя моему другому вопросу о результатах веб-службы ASP.NET, классах прокси и преобразовании типов. Я пришел к участию в моем проекте, где мне нужно надеть свою мысленную шапку.

По сути, у нас есть большой, сложный пользовательский объект, который необходимо вернуть из веб-службы и использовать в клиентском приложении.

Теперь, основываясь на предыдущем обсуждении, мы знаем, что это примет форму прокси-класса (ов) в качестве возвращаемого типа. Чтобы преодолеть это, нам нужно в основном скопировать свойства из одного в другое.

В этом случае это то, что я бы действительно, действительно, действительно! хотел бы избежать!

Итак, это заставило меня задуматься, как еще мы можем это сделать?

Мои нынешние мысли состоят в том, чтобы включить объект для полной сериализации в XML, а затем вернуть XML в виде строки из веб-службы. Затем мы десериализуем на клиенте. Это будет означать значительную часть украшения атрибутов, но, по крайней мере, код на обеих конечных точках будет легким, а именно путем использования.NET XML Serializer.

Что вы думаете об этом?

4 ответа

Решение

Сериализация.Net XML (de) довольно хорошо реализована. Сначала я не думаю, что это плохая идея.

Если два приложения импортируют одно и то же определение (я) класса (ов) C#, то это относительно хороший способ получить поведение конструктора копирования бесплатно. Если структура класса изменится, то все будет работать, когда обе стороны получат новое определение класса, без необходимости вносить какие-либо дополнительные изменения в сторону потребления / конструирования веб-службы.

При маршалинге и демаршаллинге XML есть небольшие накладные расходы, но это, вероятно, превосходит накладные расходы на вызов удаленного веб-сервиса. XML-сериализация.Net хорошо понятна большинству программистов и должна создавать простое в обслуживании решение.

Я люблю JSON для такого рода вещей. Я только что закончил POC-портал для моей компании, используя jQuery обращаться к веб-сервисам с включенным скриптовым сервисом. Сообщения легки и разбираются, и т.д. в значительной степени обрабатываются. jQuery ajax вещи, которые я прочитал, были здесь (любите это!): jquery ajax статья

Вчера у меня были отличные ответы на очень похожую тему, которые могут быть вам полезны:

Связь между JavaScript и сервером

Роб, если посмотреть на ваш другой вопрос, а также на этот, это звучит как точная ситуация, в которой мы оказались. Однако мы перешли от веб-служб ASP.Net к веб-службам WCF и в процессе решения (по большей части) этой проблемы.

Если есть шанс, что ваш веб-сервис может быть реализован как веб-сервис WCF, это может сработать и для вас. Следует отметить, что в то же время мы поддерживали обратную совместимость с некоторыми клиентскими приложениями, которым требуется реализация "стиля веб-службы ASP.Net" с использованием привязки WCF basichttp для транспорта службы. Конечный результат заключается в том, что наши "новые" клиентские приложения могут использовать наши реальные бизнес-объекты (посредством ссылки на сборку, содержащую только эти общие объекты) в качестве типов возврата из вызовов веб-службы, поскольку они выполняют реальные вызовы WCF.

Мы делаем это, не используя автоматически сгенерированные прокси-классы и создавая собственный клиентский канал для связи со службой WCF.

Если вы можете использовать WCF, дайте мне знать, что я могу опубликовать дополнительную информацию.

Другие вопросы по тегам