2008-12-04 5 views
1

Я недавно участвовал в разработке службы WCF, которая действует как своего рода многоадресное реле (т.е. принимает некоторые входящие данные, выполняет некоторую обработку и затем отправляет ее нескольким другим внешним службам) , эта услуга (которую я буду называть «моей услугой») подает данные второй внутренней службой.wcf service to service communication & data contract

Эти данные будут переданы из моей службы как XML, хранящиеся в строке. поэтому моя служба может просто принять строку в качестве параметра для запроса метода, но это не идеально, поскольку мы теряем безопасность типа.

У второй службы есть класс, который инкапсулирует всю информацию, которую моя служба требует обработки, и, в конечном счете, ретранслируется во внешние службы.

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

что было бы лучшим способом для меня сказать в моем datacontract, что мне нужен этот тип класса без дублирующего кода? могу ли я добавить ссылку на службу для этого второго класса, а затем использовать класс прокси, который создается в моем контракте на данные?

Я просто не могу обдумать это, хотя это кажется тривиальной проблемой!

приветствует любую помощь!

ответ

2

Если вы пытаетесь избежать дублирования классов, поместите объявление класса в свою собственную сборку и передайте эту DLL между всеми сторонами службы WCF. Когда вы создаете ссылку на службу, вы можете выбрать, какие сборки будут доступны (если вы используете служебную программу VS GUI).

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