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

99
10

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


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


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


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


Итак, в системе "A" мне нужно создать клиент для второго веб-сервиса, где я вызову метод "UpdateData" с помощью этого аргумента с измененным сложным объектом.


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


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


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

спросил(а) 2010-07-01T03:40:00+04:00 10 лет, 3 месяца назад
1
Решение
92

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

Для получения дополнительной информации см. Инструмент языка Web Services Description (Wsdl.exe)

ответил(а) 2010-09-12T11:18:00+04:00 10 лет, 1 месяц назад
91

Я не считаю, что это возможно с веб-службами 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 из службы.


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

ответил(а) 2010-07-01T22:35:00+04:00 10 лет, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема