Пространства имен и разрешение типов в решениях C # с веб-сервисами - PullRequest
0 голосов
/ 21 марта 2011

Это может немного запутаться, поэтому, пожалуйста, дайте мне знать, если вам нужны разъяснения.

У меня есть решение, которое содержит следующие проекты

Project A - WPF application
Project B - ASP.NET application (with exposed webservices)
Project C - Class Library

Справочные типы как проекта A, так и проекта B, расположенные в проекте C, но, что более важно, проект A выполняет вызовы веб-службыпроектировать B, используя типы, расположенные в проекте C.

Проблема, с которой я сталкиваюсь, заключается в том, что при выполнении вызовов веб-службы у меня нет возможности ссылаться на типы, расположенные в проекте C напрямую, а скорее нужноиспользуйте типы, предоставляемые веб-сервисом.

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

Самая большая проблема, которую я вижу при продолжении этого подхода, заключается в том, что любые обновления типов в проекте C необходимо будет отразить в проекте B, а затем «обновить» в проекте A. Мне это кажется довольно неприятным.Конечно, есть более гладкий путь?

Я не прав?Каков типичный подход к этому вопросу?

Ответы [ 2 ]

2 голосов
/ 21 марта 2011

Вы можете быть немного смущены здесь.

Типы Project C и типов , которые отображаются при добавлении ссылки на веб-службу, различны.

Когда вы добавили ссылку на веб-сервис. Visual Studio использовала svcutil.exe , считала метаданные из вашего веб-сервиса (я полагаю, .asmx?), А затем создала прокси-классы для вас.

Проверьте типы для веб-службы (они, очевидно, будут иметь одинаковые имена). Наведите на них курсор и нажмите F12 . Это приведет вас к некоторому сгенерированному дизайнером коду.

Так что нет реального обходного пути как такового. Когда вы обновляете свои типы в Project C, а затем обновляете свои веб-службы в Project B. Вам потребуется Обновить справочную службу с Project A, которая снова использует svcutil.exe и восстановит все ваши прокси.

Кроме того, так же работают службы WCF.

0 голосов
/ 21 марта 2011

@ giddy правильно: типы, предоставляемые веб-службой, отличаются от типов, содержащихся в Project C, даже если их определение может быть идентичным.Веб-служба предоставляет информацию о типах через wsdl, который Visual Studio использует для создания типов прокси.

Существует способ обойти это - вы можете создать интерфейс, который объявляет все методы в классе веб-службы, и включатьэто в вашей общей библиотеке.Затем вы можете пропустить процесс «Добавить ссылку на службу» и создать прокси-сервер веб-службы с кодом (вам не понадобятся прокси-классы, поскольку вы используете классы в общей библиотеке).

В любом случае, еслиВы вносите изменения в свои объекты передачи данных или класс веб-службы, вам необходимо обновить клиента, либо запросив wsdl с помощью «Обновить ссылку на службу», либо скопировав общую библиотеку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...