Как использовать WSDL

126

Мне нужно использовать веб-службу. Они прислали мне WSDL-файл. Что мне делать, чтобы добавить его на свой сайт и начать использовать в качестве прокси. (Если я помещу его в виртуальный каталог, его можно будет обнаружить, но дает ли он мне соединение с реальной веб-службой?)

jmayor
источник
9
Что ж, я поддержал, потому что я думаю, что другим пользователям здесь было бы полезно увидеть ответ. Я искал именно эту проблему и счастлив, что нашел ее здесь.
schizoid04

Ответы:

138

Я бы запустил Visual Studio, создал веб-проект (или консольное приложение - не имеет значения).

Для .Net Standard:

  1. Я бы щелкнул проект правой кнопкой мыши и выбрал «Добавить ссылку на службу» из контекстного меню « Добавить» .
  2. Я бы щелкнул «Дополнительно», а затем - «Добавить ссылку на службу».
  3. Я бы получил полный путь к файлу wsdl и вставил его в адресную строку. Затем выстрелите стрелкой (кнопка перехода).
  4. Если при попытке загрузить файл возникает ошибка, то должен быть сломанный и неразрешенный URL-адрес, который необходимо разрешить файлу, как показано ниже: введите описание изображения здесь См. Этот ответ для получения информации о том, как исправить: Ответ Stackoverflow на: Невозможно создать ссылку на службу для wsdl файл

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

Для .Net Core

  1. Я бы щелкнул правой кнопкой мыши по проекту и выбрал Connected Service из контекстного меню Add.
  2. Я бы выбрал из списка Microsoft WCF Web Service Reference Provider.
  3. Я бы нажал «Обзор» и сразу выбрал файл wsdl, установил пространство имен, и все готово. Обратитесь к URL-адресу исправления ошибки выше, если вы столкнетесь с какой-либо ошибкой.

Любой из вышеперечисленных методов создаст для вас простой и очень простой клиент WCF. В сгенерированном коде вы должны найти класс YourservicenameClient.

Для справки, сгенерированный файл cs можно найти в вашем Obj / debug (или release) / XsdGeneratedCode, и вы все равно можете найти dll в папке TempPE.

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

Создайте экземпляр клиента и вызовите методы, которые хотите вызвать - вот и все!

YourServiceClient client = new YourServiceClient();
client.SayHello("World!");

Если вам нужно указать удаленный URL (не используя тот, который создан по умолчанию), вы можете легко сделать это в конструкторе прокси-клиента:

YourServiceClient client = new YourServiceClient("configName", "remoteURL");

где configName- имя используемой конечной точки (вы будете использовать все настройки, кроме URL-адреса), а remoteURL- это строка, представляющая URL-адрес для подключения (вместо того, который содержится в конфигурации).

marc_s
источник
Это прекрасно работает. Только один вопрос, если у меня есть файл wsdl на моей машине, и я добавляю ссылку на этот файл. При выполнении URL-адреса, который он попадает, является тот, на котором размещается веб-служба, или мне нужно указать привязку и конечную точку?
jmayor
1
Это зависит от вас - по умолчанию код, созданный для прокси-сервера клиента, будет иметь URL-адрес, содержащийся внутри WSDL - если вам нужно перейти на другой URL-адрес, вам нужно указать его самостоятельно.
marc_s
Почему это так просто? Нет ли подвоха? : p Спасибо!
Odys
1
В качестве принятого ответа было бы хорошо, если бы вы также упомянули, как использовать размещенный в Интернете WSDL из URL-адреса.
Caltor
Я думаю, что довольно близок к тому, чтобы это заработало. У меня установлена ​​веб-служба с помощью инструмента «Добавить ссылку на службу». Я могу создать экземпляр клиента, но не могу вызвать методы. Конечная точка использует реализацию Java, и все, что я вижу, это XML. Метод, который я пытаюсь вызвать, ищет клиентов и «что-то еще». Это что-то еще - класс. Что вызывает недоумение. Я могу поместить это в сообщение ниже, если это поможет, но я сбит с толку.
mappingman
45

В визуальной студии.

  • Создайте или откройте проект.
  • Щелкните проект правой кнопкой мыши в обозревателе решений.
  • Выберите «Добавить ссылку на услугу».
  • Вставьте адрес с полученным WSDL.
  • Щелкните ОК.

Если ошибок нет, вы сможете увидеть ссылку на службу в обозревателе объектов и все связанные методы.

vidalsasoon
источник
9
<3 Visual Studio .. Да, это действительно так просто :)
cwap
3
У OP не адрес, а файл.
Хенк Холтерман
1
Провайдер веб-службы мог отключить WSDL (безопасность посредством неясности), поэтому нет URL-адреса, по которому можно получить доступ к WSDL, а затем добавить веб-ссылку в VS не будет. Однако провайдер действительно хочет, чтобы ВЫ (я имею в виду OP) знали все, что вам нужно знать о контракте на обслуживание, поэтому они отправили файл WSDL. Теперь OP должен сгенерировать из него прокси-код, вопрос в том, как это сделать.
azheglov
3
Набрав путь к файлу. Что заставляет вас думать, что это не работает?
Джон Сондерс,
1
Привет, @vidalsasoon. Не могли бы вы вкратце объяснить, как мне использовать эти классы, которые я вижу в своем проводнике классов. ?
CalZone 08
16

Используйте служебную программу WSDL.EXE для создания прокси веб-службы из WSDL.

Вы получите длинный исходный файл C #, содержащий класс, который выглядит следующим образом:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="MyService", Namespace="http://myservice.com/myservice")]
public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol {
    ...
}

В вашем клиентском коде, использующем Web-сервис:

  1. создать экземпляр MyService.
  2. установить его свойство Url
  3. вызывать веб-методы
azheglov
источник
5
Это создает веб-сервис ASMX в «старом стиле» - они устарели - в настоящее время следует использовать WCF
marc_s
7

Если вы хотите добавить ссылку wsdl в проект .Net Core , опция «Добавить веб-ссылку» отсутствует.

Чтобы добавить ссылку на wsdl, перейдите в обозреватель решений, щелкните правой кнопкой мыши элемент проекта «Ссылки» и выберите параметр « Добавить подключенную службу» .

введите описание изображения здесь

Затем нажмите «Справочник веб-службы Microsoft WCF»:

введите описание изображения здесь

Введите путь к файлу в текстовое поле URI и импортируйте WSDL:

введите описание изображения здесь

Он сгенерирует простой, очень простой клиент WCF, и вы можете использовать его примерно так:

YourServiceClient client = new YourServiceClient();
client.DoSomething();
Недзад Г
источник
Это расширение мне не кажется.
Рафаэль Пизао,