Типы прокси WCF находятся в пространстве имен, отличном от типов служб WCF

Я вызываю службу через WCF и столкнулся с проблемой несоответствия пространств имен.

Объект, который отправляется через службу, находится в пространстве имен MyProject.Commons.BuisnessObjects, и я проверил это с помощью WcfTestClient.

Когда я вызываю метод на стороне клиента в службе (после запуска с помощью new MyServiceClient()), метод дает мне правильные объекты, но с другими пространствами имен.

Теперь объект принадлежит Web.MyService.Object. Я пробовал кастинг, но это не помогло.

Кто-нибудь видел это раньше?

Спасибо, Тайн


person Community    schedule 22.07.2009    source источник


Ответы (3)


Это ожидаемое поведение. Так работают веб-сервисы. Они должны быть разных типов.

person John Saunders    schedule 22.07.2009
comment
Хорошо, но это какой-то способ сопоставления пространств имен? У меня есть MyService2, который возвращает MyProject.Commonc.BuisnessObjects, поэтому, похоже, есть обходной путь (я просто не вижу разницы между двумя службами, из-за которой одна из них возвращает другое пространство имен). - person ; 22.07.2009
comment
Они разных типов. Вы не хотите, чтобы они находились в одном и том же пространстве имен, если только вы не хотите, чтобы каждый клиент совместно использовал ту же самую DLL, которую использует сервер. Что вы пытаетесь достичь? - person John Saunders; 22.07.2009

Если вы добавили ссылку на службу (например, WCF), а не старомодную веб-ссылку, вы можете сопоставить их. Добавьте ссылку на общую библиотеку, определяющую ваш тип объекта, в клиент, прежде чем добавлять ссылку на службу, тогда есть вариант, когда вы добавляете ссылку на типы повторного использования.

person David M    schedule 22.07.2009
comment
У этого есть серьезный недостаток, заключающийся в том, что теперь вы создали зависимость между вашим клиентом и реализацией вашего сервиса. Без этого существует только зависимость от контракта службы. - person John Saunders; 22.07.2009
comment
Только если вы определили объект в той же библиотеке, что и реализация вашего сервиса, чего я не предлагал. - person David M; 22.07.2009

Это связано с тем, что ваши типы не являются общими для службы и клиента. Поэтому клиент воссоздает для вас ваши структуры данных в пространстве имен Web.MyService.

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

Подробный сценарий и пример проекта вы можете найти здесь:

http://blog.walteralmeida.com/2010/08/wcf-tips-and-tricks-share-types-between-server-and-client.html

person Walter Almeida    schedule 19.08.2010