Как сгенерировать ссылку на сервис только с физическим файлом wsdl

Я годами создавал и использовал веб-службы и всегда мог использовать Visual Studio для создания ссылки на службу из клиента. У меня есть сторонняя служба, с которой мне нужно работать, и они отказываются открывать свою систему безопасности, чтобы я мог увидеть wsdl и сделать ссылку на службу. Это общедоступный сервис, поэтому я не вижу необходимости в таком уровне безопасности, но это то, что есть.

Я знаю, что это вопрос n00b, и мне стыдно его задавать, но как мне создать эквивалентную справочную информацию о сервисе в моем клиенте, когда все, что у меня есть, это физическая копия wsdl, которую клиент отправил мне по электронной почте? Изменения в файле web.config, слой объектов поверх данных SOAP и т. Д. Как и в случае с автоматической ссылкой на службу, я просто хочу открыть подключение к службе и начать использовать ее с определенными объектами.

Насколько я могу судить, сторонний сервис - это не WCF, а SOAP. Я использую VS 2010 кстати. Заранее спасибо Кен

3 ответа

Это может быть самый простой способ

  • Щелкните правой кнопкой мыши по проекту и выберите "Добавить ссылку на службу..."
  • В поле Адрес: введите физический путь (C:\test\project....) загруженного / измененного wsdl.
  • Хит Го

Есть два способа сделать это. Вы можете использовать IDE для генерации WSDL или через командную строку.

1. Чтобы создать его через IDE:

На панели обозревателя решений щелкните правой кнопкой мыши проект, в который вы хотите добавить Службу:

Затем вы можете ввести путь к вашему WSDL-сервису и нажать go:

2. Чтобы создать его через командную строку:

Откройте командную строку VS 2010 (Программы -> Visual Studio 2010 -> Инструменты Visual Studio)
Затем выполните:

WSDL /verbose C:\path\to\wsdl

WSDL.exe выведет файл.cs для вашего потребления.

Если у вас есть другие зависимости, которые вы получили с файлом, например, xsd, добавьте их в список аргументов:

WSDL /verbose C:\path\to\wsdl C:\path\to\some\xsd C:\path\to\some\xsd

Если вам нужен выход VB, используйте /language:VB в добавок к /verbose,

Предшественники показывают, как импортировать из локального файла, но есть небольшие шансы, что ваш WSDL будет иметь ссылку на один или несколько XSD, и вы получите сообщение об ошибке:

Вам нужно будет загрузить все указанные XSD-файлы и поместить их в тот же каталог, что и указанный WSDL. Затем вам придется вручную отредактировать WSDL и изменить schemaLocation на локальные загруженные файлы.

До

        <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/Imports">
      <xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd0" namespace="http://tempuri.org/" />
      <xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
      <xsd:import schemaLocation="http://gate.somesite.local:8084/Shop/SomeService.svc?xsd=xsd2" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
    </xsd:schema>
  </wsdl:types>

После

        <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/Imports">
      <xsd:import schemaLocation="tempuri.org.xsd" namespace="http://tempuri.org/" />
      <xsd:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/" />
      <xsd:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.Arrays.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
    </xsd:schema>
  </wsdl:types>

Остерегайтесь, что загруженные файлы XSD также могут иметь ссылку на веб-адреса.

Как это:

До

      <xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="http://gate.somesite.local:8084/Shop/DaxService.svc?xsd=xsd2" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />

После

      <xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/DaxServiceLibrary.Messages" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import schemaLocation="schemas.microsoft.com.2003.10.Serialization.Arrays.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
Другие вопросы по тегам