Создать прокси веб-службы в Visual Studio из файла WSDL

102

Мое приложение должно взаимодействовать с веб-службой, не имеющей определения WSDL в Интернете. Однако разработчики предоставили мне файл WSDL.

С общедоступным WSDL Visual Studio может сгенерировать для меня этот код с помощью мастера Service Reference. Но, похоже, это не работает без общедоступного WSDL.

Как сгенерировать код для разговора с этой веб-службой с помощью этого файла WSDL?

Энн
источник

Ответы:

116

Попробуйте использовать WSDL.exe, а затем включить сгенерированный файл (.cs) в свой проект.

Запустите командную строку Visual Studio (в разделе Visual Studio / tools в меню «Пуск»), затем введите

>wsdl.exe [path To Your WSDL File]

Это выдаст файл, который вы копируете / перемещаете и включаете в свой проект. Этот файл содержит класс, который является прокси для вашего сервиса, запускает экземпляр этого класса, и у него будет свойство URL, которое вы можете установить на лету, и набор методов, которые вы можете вызвать. Он также будет генерировать классы для всех / любых сложных объектов, передаваемых через интерфейс службы.

Эндрю М
источник
2
Спасибо! И вы можете использовать параметр / o для пути к экспортированному файлу. например> wsdl.exe example.com/service.wsdl / o: C: \ Users \ X \ Desktop
gkonuralp 04
2
и, при желании, вручную добавить пространство имен, охватывающее все классы, чтобы предотвратить конфликт с сгенерированными аналогичными файлами.
Blue Clouds
139

Использование WSDL.exe у меня не сработало (дало мне сообщение об отсутствии типа), но я смог щелкнуть правой кнопкой мыши свой проект в VS и выбрать «Добавить ссылку на службу». Я ввел путь к файлу wsdl в поле «Адрес» и нажал «Перейти». Казалось, что он смог найти все подходящие типы и добавил классы прямо в мой проект.

Джеффаудио
источник
3
Столкнувшись с тем же сценарием, и ваше предложение избавило меня от многих разочарований и, возможно, немного волос. Вам предоставлена ​​заслуженная репутация. (Как косвенный результат, вы получили +100 на всех сайтах :))
Shadow Wizard is Ear For You
Я пробовал это, файл импортируется, но я не вижу в своем коде классы
guiomie
1
Я пробовал этот метод с помощью MSVC 2015, но он отказался обрабатывать файл wsdl с использованием URL-адреса. Поэтому я использовал метод, описанный Эндрю М.
Германом
1
Я пробовал это на компьютере разработчика, у которого нет разрешения на доступ к веб-сервису. Несмотря на то, что файл .wsdl находится локально, он попытался подключить службу, когда я нажал «Go». Поэтому я не смог добавить ссылку. В этой ситуации я считаю, что предпочтение следует отдавать решению Эндрю М.. Это сработало хорошо.
gkonuralp 06
@jeffaudio. Я столкнулся с аналогичной проблемой. Я могу добавить ссылку на службу для веб-проекта, но с помощью wsdl.exe я не могу создать прокси-файл. любое предложение ..???
prakash r
15

Кстати, если у вас есть все файлы локально (не только файл wsdl, но и файлы xsd), вы можете вызвать wsdl.exe таким образом:

wsdl.exe [path to your wsdl file] [paths to xsd files imported by wsdl]

Таким образом, wsdl.exe может разрешить все зависимости локально и правильно сгенерировать прокси-класс.

Может быть, это кому-то сэкономит время - решит ошибку «отсутствует тип», когда услуга недоступна онлайн.

Ярек Мазур
источник
4

Есть Microsoft Doc для создания вашего WCFпрокси из командной строки.

Вы можете найти свою локальную копию wsdl.exeв подобном месте: C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools( Подробнее здесь )

В итоге вы Commandдолжны выглядеть примерно так:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\wsdl.exe"
 /language:CS /n:"My.Namespace" https://www.example.com/service/wsdl
Серж Саган
источник
1

сохраните файл на диске, а затем используйте следующий URL-адрес:

file://your_path/your_file.wsdl
Эван Камиллери
источник
Это единственный вариант, который у меня сработал, так как файл, о котором идет речь, нужно было сначала загрузить после аутентификации. Спасибо!
Кевин Рэдклифф
-1

Поскольку истинный URL-адрес привязки для веб-службы находится в файле, вы можете выполнить следующие простые шаги со своего локального компьютера:

1) Сохраните файл на локальном компьютере, например:

C:\Documents and Settings\[user]\Desktop\Webservice1.asmx

2) В Visual Studio щелкните правой кнопкой мыши свой проект> выберите «Добавить веб-ссылку», откроется диалоговое окно.

3) В поле URL-адреса скопируйте расположение локального файла выше C: \ Documents and Settings [пользователь] \ Desktop \ Webservice1.asmx, нажмите «Далее».

4) Теперь вы увидите, как появляются функции, выберите свое имя для ссылки, нажмите "Добавить ссылку".

5) Готово! вы можете начать использовать его в качестве пространства имен в своем приложении, не беспокойтесь о том, что вы использовали локальный файл, потому что в любом случае истинный URL-адрес службы находится в файле в разделе привязки

Израиль Маргулис
источник
2
Это уже было предложено в существующем ответе, зачем повторять?
Shadow Wizard is Ear For You
Зачем нужен asmx файл, когда вопрос про wsdl?
Blue Clouds