Как сгенерировать ссылку на сервис только с физическим файлом 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" />