.Net-потребляющая веб-служба: одинаковые типы в двух разных службах

Мне нужно использовать 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.

Спасибо!!

Редактировать:

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


person Steve Horn    schedule 16.10.2008    source источник
comment
Как это повлияет на Java? инструмент WSDL генерирует код C #.   -  person leppie    schedule 16.10.2008
comment
Причина, по которой я добавил, что сервисной платформой является Java, заключается в том, что первый ответ, который я получил, предполагал совместное использование типов .Net между клиентом и сервером.   -  person Steve Horn    schedule 16.10.2008


Ответы (5)


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

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

person Steve Horn    schedule 17.10.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.
person leppie    schedule 16.10.2008

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

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 на файлы.

person CJBrew    schedule 28.05.2010

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

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

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

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

person user28636    schedule 16.10.2008

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

person Mark Cidade    schedule 16.10.2008