wcf сервис к сервису связи и передачи данных
Недавно я принимал участие в разработке службы WCF, которая действует как своего рода многоадресная ретрансляция (т.е. принимает некоторые входящие данные, выполняет некоторую обработку и затем отправляет их нескольким другим внешним службам). этот сервис (который я буду называть "мой сервис") получает данные от второго внутреннего сервиса.
эти данные будут передаваться из моего сервиса в виде XML в виде строки. поэтому мой сервис может просто принять строку в качестве параметра для запроса метода - но это не идеально, поскольку мы теряем безопасность типов.
второй сервис имеет класс, который инкапсулирует всю информацию, которая требуется моему сервису для обработки и, в конечном итоге, ретранслируется на внешние сервисы.
второй сервис выставляет этот класс в своем контракте данных. В идеале, чтобы поддерживать безопасность типов и не требовать большого количества изменений для реализации второй службы, я должен принять этот тип класса в качестве аргумента для моей операции службы.
Что было бы лучшим способом для меня сказать в моем datacontract, что мне требуется этот тип класса без дублирования кода? Могу ли я добавить ссылку на службу для этого второго класса, а затем использовать прокси-класс, который создается в моем контракте данных?
я просто не могу обдумать это, хотя это кажется тривиальной проблемой!
ура за любую помощь!
1 ответ
Если вы пытаетесь избежать дублирования классов, поместите объявление класса в его собственную сборку и поделитесь этим dll между всеми сторонами в службе WCF. Когда вы создаете сервисную ссылку, вы можете выбрать, какие сборки являются общими (при условии, что вы используете служебную утилиту VS GUI).
Использование прокси-класса также может быть хорошим способом. Если вы представляете свой основной класс данных в качестве контракта на данные, а затем создаете прокси-сервер, у него будет версия открытого класса, который может использоваться вашими другими службами.