Веб-служба потребления .Net: идентичные типы в двух разных службах - PullRequest
5 голосов
/ 16 октября 2008

Мне нужно использовать 2 разных веб-сервиса. Оба содержат определение для пользовательского объекта.

Когда я ссылаюсь на сервисы с помощью «Добавить сервисную ссылку», я даю каждому сервису уникальное пространство имен:

com.xyz.appname.ui.usbo.UserManagement    
com.xyz.appname.ui.usbo.AgencyManagement

У меня проблема в том, что каждый из сгенерированных прокси содержит новый класс пользователя. Один находится по адресу com.xyz.appname.ui.usbo.UserManagement.user, а другой - по адресу com.xyz.appname.ui.usbo.AgencyManagement.user. Тем не менее, пользовательские объекты идентичны, и я хотел бы рассматривать их как таковые.

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

Я использую .Net 3.5 для использования сервиса. Используемая служба написана на Java.

Спасибо !!

Edit:

Эта ветка форума была очень близка к ответу, но в итоге был принят общий доступ к типам с клиента и сервера - что я не могу сделать, потому что мы пересекаемся с платформами (с Java на .Net) , Реальный вопрос в том, есть ли в WCF параметр типа / sharetypes для svcutil?

Ответы [ 5 ]

3 голосов
/ 17 октября 2008

В итоге у меня получилось предоставить svcutil.exe все WSDL-адреса, из которых мне нужно было сгенерировать код. SVCUTIL рассмотрит все типы из каждого сервиса и автоматически определит, какие из них являются общими и должны быть повторно использованы.

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

2 голосов
/ 28 мая 2010

Если вы работаете с локальными файлами, вы можете сделать следующее:

wsdl.exe /sharetypes file://c:\path\to\file.wsdl file://c:\path\to\otherFile.wsdl /namespace:<your namespace> /output:(any switches etc...)

Переключатель sharetypes требует, чтобы вы указали URL-адреса служб, и не работает, если вы просто указываете wsdl на файлы.

2 голосов
/ 16 октября 2008

У инструмента WSDL есть параметр.

/sharetypes
    Turns on type sharing feature. This feature creates one code file with
    a single type definition for identical types shared between different
    services (namespace, name and wire signature must be identical).
    Reference the services with http:// URLs as command-line parameters
    or create a discomap document for local files.
1 голос
/ 16 октября 2008

Это обычная ситуация при использовании веб-сервисов с разными конечными точками от одного и того же провайдера.

Вы можете использовать инструмент командной строки «wsdl.exe / sharetypes» для создания общего прокси-класса, который будет проверять все предоставляемые вами конечные точки и определять, какие классы могут быть «общими».

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

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

0 голосов
/ 16 октября 2008

Вы можете поместить тип user в общую общую сборку, на которую ссылаются как сервис, так и клиентский проект. Затем в конфигурации для обоих сервисных клиентов вы можете выбрать вариант повторного использования типов в ссылочных сборках. Таким образом, вы используете тип в ассемблере, а не сгенерированный отдельно класс.

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