Я создал два wsdl файла с общими типами, импортированными из xsd файла схемы.
После этого я создал интерфейс использования веб-сервисов, сгенерированный инструментом wsdl.exe с параметром/serverInterface.
Веб-сервис Frist, имейте веб-метод “RegisterData” с помещенным в очередь некоторый сложный объект, который будет обработан системой “A”. Когда результат этого метода возвращается булевская переменная (с, говорят нам, что объект был зарегистрирован успешный).
Второй веб-сервис, имейте веб-метод “UpdateData” для обновления некоторых данных в системе “B” на основе этого того же объекта, с был изменен в процессе в системе “A”.
Таким образом в системе я должен создать клиент для второго веб-сервиса, где я назову метод “UpdateData” с этим измененным сложным объектом нами аргумент.
Но когда я создаю этот клиент в Visual Studio (добавляет веб-ссылка или добавляет сервисную ссылку), я должен создать некоторое пространство имен для клиента. И затем когда я пытаюсь звонить, "UpdateData" agument имеют другое пространство имен для этого того же объекта, полученного от первого веб-сервиса метод “RegisterData”.
Я хотел бы создать первый веб-сервис и второй клиент веб-сервиса, где я могу использовать этот тот же текстовый объект между ними.
Большое спасибо за справку.
Я не верю, что это возможно с веб-сервисами 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. Это работает довольно хорошо.