Автоматическая сериализация - PullRequest
0 голосов
/ 08 августа 2011

Я хочу загрузить спецификации xsd из веб-службы и автоматически преобразовать (сериализовать) эти схемы в классы (visual studio - vb.net).Если организация, отвечающая за схемы xsd, изменяет их таким образом, что необходимо изменить только мой класс, соответствующий xsd (а не остальную часть моего кода), я бы хотел автоматически обновить свой соответствующий xsd класс.Это возможно?Если так, может кто-нибудь сказать мне, как это сделать?

Спасибо!

Я использую vs2010.Я хочу сделать следующее: вызвать веб-сервис, где я могу отправить входной параметр в сервис, который указывает xsd, который я хочу получить (сервис GetShemaDefenition и возвращает объект со спецификацией схемы в строковом свойстве объекта).).Мне нужно прочитать строку xsd из свойства string и преобразовать ее в представление класса этой спецификации xsd.Возможно ли сделать это автоматически?Я сделал это вручную с помощью xsd.exe.Если организация-владелец xsd изменила спецификацию xsd, я должен проверить, существует ли новая спецификация, и если она есть, мне нужно создать новое представление класса этого xsd?Можно ли делать то, что я хочу?И как бы я узнал, если в xsd произошли большие изменения, которые также повлияли на другие части моего кода, а не только на представление класса xsd?

Большое спасибо за ваш ответ!Итак, что вы говорите, если я правильно вас понял, это то, что не существует хорошего решения для автоматизации этой функциональности, потому что, если xsd изменяется, мне, скорее всего (в некоторых случаях), придется менять свой код вручную?Таким образом, я должен выбрать, или в моем заявлении или в моем промежуточном обслуживании?Но какова цель предоставления xsd в веб-сервисе?Для чего я могу использовать веб-сервис?Мне просто интересно, может быть, это понятно, но я новичок в веб-сервисах и хочу узнать больше.

Обновление:

Спасибо!Но вы можете объяснить немного больше.Что я должен сделать: я использую один веб-сервис, где одно из свойств является строкой.Строка представляет собой XML внутри блока CDATA.Организация, предоставляющая веб-службу, не будет сокращать xml внутри блока CDATA, а вместо этого перенаправит ее в другую организацию, которая будет использовать данные xml.Организация, использующая данные xml, определяет схему xsd, которой я должен следовать, чтобы сгенерировать правильный xml.Это схема xsd, которую я могу получить из другого веб-сервиса.Я действительно не понимаю, что я могу сделать с этим файлом xsd из веб-службы.Что я могу сделать с этим и почему я хочу загрузить это из веб-службы, когда я не могу использовать это автоматически?Поскольку я должен вручную вносить изменения при изменении xsd, я могу легко загрузить схему xsd с домашней страницы организации и создать новый класс с помощью xsd.exe.Я понимаю, что есть кое-что, чего я не понимаю: о), не могли бы вы уточнить?

1 Ответ

0 голосов
/ 09 августа 2011

Какую версию Visual Studio вы используете ?, Обычно вы можете нажать на ссылки проекта и Добавить веб-сервис. В этом случае Visual Studio автоматически создает объекты, необходимые для использования сервиса. Вы можете обновить его в любое время, щелкнув правой кнопкой мыши по ссылке.

Однако, если вероятность того, что оно будет часто меняться, очень высока, одним из решений является реализация класса адаптера. используйте создать интерфейс, который обеспечивает ту же функциональность и вызвать реальный веб-сервис. В вашем приложении вы используете только прокси-класс, а не веб-сервис. Позже, когда интерфейс веб-службы изменится, все, что вам нужно сделать, - это изменить внутренние компоненты этого промежуточного класса.

Обновление:

Вы можете использовать этот инструмент для создания своей объектной модели в коде. Затем вы можете скомпилировать вашу новую объектную модель и использовать ее в своем приложении. Есть много сложностей в том, что вы хотите сделать, и суть в том; когда объектная модель изменится, ваш код потерпит неудачу. Нет абсолютно никакого способа представить, как изменится интерфейс, поэтому, хотя вы можете делать все это автоматически, ничего не нужно делать, если имя функции меняется.

Однако ответом на вашу ситуацию является косвенность. Если вы не можете гарантировать стабильность внешнего сервиса. Почему бы не создать стабильный промежуточный сервис, который вызывает фактический? таким образом, в будущем вам не нужно трогать ваше приложение. Все, что вам нужно сделать, это изменить промежуточный сервис, сохраняя его интерфейс совместимым.

...