В чем суть генерации классов, которые являются копией по полям тех, что используются в сервисе WCF?

219
16 июля 2017, 09:37

Когда я создаю ServiceReference генерируются partial классы, которые являются точной копией по полям классов, которые использует сервис. Я не нашел никакой информации и обьяснений по этому поводу, по сему обращаюсь к аудитории даного ресурса.

Так же обнаружил, что каждый раз при обновлении ServiceReference обновляются и создаваемые им partial классы.

Answer 1

Если кратко - смысл в том, что бы избавить клиентов вашего сервиса от головной боли и предоставить набор метаданных, на основании которых можно автоматически сгенерировать клиент, для взаимодействия с вашей службой. Кроме того, поскольку набор метаданных представлен в виде WSDL (что является стандартным языком для описания Web служб, а потому его поддерживают все крупные ИТ игроки), это в свою очередь позволяет поставщикам и потребителям быть свободным в выборе способа реализации своих объектов обмена, главное что бы они соответствовали определению сервиса. Это означает, например, что клиент может быть написан на Java, а сервер на C# или любом ином языке.

Answer 2

В общем случае эти классы недоступны клиенту (например, если сервис писали не вы) и поэтому для клиента генерируются копии классов из WSDL, чтобы он мог вызывать сервис.

Answer 3

Если вы добавляете ссылку на сервис через конструктор студии, то конструктор вынужден генерировать код из WSDL, т.к. он не знает о сервисе ничего, кроме метаданных, предоставленных сервисом.

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

READ ALSO
Правильно оформить try / catch

Правильно оформить try / catch

Добрый день, недавно начал очень часто сталкиваться с конструкциями try / catch, обычно оформляю их так:

363
Ошибка при попытке удалить объект через Entiy

Ошибка при попытке удалить объект через Entiy

Не получается удалить объект с использованием EntityЕсть проект ASP

237
Как правильно забрать cookies проставленные в тесте используя jsdom?

Как правильно забрать cookies проставленные в тесте используя jsdom?

Я использую jsdom В тесте я проставил cookiesКак правильно забрать cookies? Если сделать так window

231