Создание веб-сервиса и клиента с общими типами - PullRequest
5 голосов
/ 01 июля 2010

Я создал два wsdl-файла с общими типами, импортированных из файла схемы xsd.

После этого я создал веб-сервисы, используя интерфейс, сгенерированный утилитой wsdl.exe с параметром /serverInterface.

.

Веб-сервис Frist, имеет веб-метод «RegisterData» с помещением в очередь какого-либо сложного объекта для обработки системой «A». В результате этого метода возвращается логическое значение (с сообщением, что объект был зарегистрирован успешно).

Второй веб-сервис, имеет веб-метод «UpdateData» для обновления некоторых данных в системе «B» на основе этого же объекта, который был изменен в процессе работы в системе «A».

Таким образом, в системе «А» мне нужно создать клиент для второго веб-сервиса, где я буду вызывать метод «UpdateData» с этим модифицированным комплексным объектом, используя аргумент.

Но когда я создаю этот клиент в Visual Studio (добавив веб-ссылку или ссылку на службу), мне нужно создать некоторое пространство имен для клиента. И затем, когда я пытаюсь вызвать «UpdateData», у другого пространства имен для этого же объекта, полученного от первого метода веб-службы «RegisterData», есть другое.

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

Большое спасибо за помощь.

Ответы [ 2 ]

5 голосов
/ 01 июля 2010

Я не верю, что это возможно с веб-сервисами ASMX.

WCF поддерживает это, однако.


Ссылки WCF:


На самом деле, я думаю, что явозможно неправильно понял ваш вопрос.Хотя я пытался разделить одни и те же типы между клиентом и сервером.ASMX не может этого сделать.Однако, похоже, вы пытаетесь разделить одни и те же типы между двумя клиентскими прокси.Это легко сделать с помощью инструмента WSDL.EXE.

Рассмотрим схему, DataTypes.xsd и два файла WSDL, которые ее импортируют, ServiceA.wsdl и ServiceB.wsdl.Для создания серверных интерфейсов используйте:

wsdl / serverInterface /n:SharedTypes.Servers /out:Services.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd

Это создаст интерфейсы, которые вы можете реализовать для создания ваших сервисов.Оба интерфейса будут использовать один набор классов, созданный из DataTypes.xsd.Чтобы создать прокси-классы, просто используйте:

wsdl /n:SharedTypes.Proxies /out:Proxies.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd

Примечаниечто вам не нужен переключатель /sharedTypes.Это имеет другую цель.Он предназначен для объединения типов внешних служб, когда вам нужно загрузить WSDL и любой XSD из службы.

Я пробовал это на примере, подобном вашему, ServiceA отправляет сообщение в очередь и выбирает клиентадо этого сообщения и отправки его в ServiceB.Работает довольно хорошо.

0 голосов
/ 12 сентября 2010

Я согласен, что это невозможно сделать с помощью функциональности VS Web Reference. Для удовлетворения ваших требований вы можете использовать утилиту wsdl.exe с параметром / sharetypes.

Подробнее см. Инструмент языка описания веб-служб (Wsdl.exe)

...