Создание веб-сервиса и клиента с общими типами

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

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

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

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

Таким образом в системе я должен создать клиент для второго веб-сервиса, где я назову метод “UpdateData” с этим измененным сложным объектом нами аргумент.

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

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

Большое спасибо за справку.

5
задан Siekiera 1 July 2010 в 00:40
поделиться

1 ответ

Я не верю, что это возможно с веб-сервисами 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. Это работает довольно хорошо.

5
ответ дан 14 December 2019 в 18:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: