У меня есть .WSDL
файл, содержащий интерфейсы для связи со службой. Мне нужно создать хост, который предоставляет функции, описанные в WSDL.
Это означает, что мне нужно создать интерфейс с [ServiceContract]
и, возможно, один или несколько классов с [DataContract]
.
Я думал, что SvcUtil.Exe
сделает это за меня. В справке сказано:
svcutil.exe может генерировать код для контрактов на обслуживание ... из документов метаданных. Эти документы метаданных могут быть на диске или ...
Итак, я запускаю SvcUtil, находясь в папке с .WSDL:
SvcUtil.exe Example.Wsdl
Это дает мне следующую ошибку:
Ошибка: не удается импортировать wsdl: portType
Подробности: возникло исключение при запуске расширения импорта WSDL:
System.ServiceModel.Description.DataContractSerializerMessageContractImporter Ошибка: схема с целевым пространством имен 'http://logiusНеудалосьнайти.nl/digipoort/koppelvlakservices/1.2/ '.
XPath to Источник ошибки: < br> // wsdl: определения [@targetNamespace = 'http://logius.nl/digipoort/wus/2.0/afleverservice/1.2/ '] / wsdl: portType [@ name =' AfleverService_V1_2 ']
Я интерпретирую это как то, что этому файлу example.wsdl
нужна схема, которую невозможно найти.
В файле Example.WSDL:
<wsdl:types>
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import
namespace = "http://logius.nl/digipoort/koppelvlakservices/1.2/"
schemaLocation="../digipoort-koppelvlak-1.2.xsd"
/>
</xsd:schema>
</wsdl:types>
Я предполагаю, что это означает, что файл с запрошенной схемой должен находиться в суперпапке с именем файла digipoort-koppelvlak-1.2.xsd
. У меня есть базовая папка, содержащая информацию о схеме, и подпапку, содержащую .WSDL:
basefolder
digipoort-koppelvlak-1.2.xsd
basefolder\subfolder
Example.WSDL
Первая строка digipoort-koppelvlak-1.2.xsd
:
<xsd:schema xmlns:xsd = "http://www.w3.org/2001/XMLSchema"
xmlns:tns ="http://logius.nl/digipoort/koppelvlakservices/1.2/"
targetNamespace = "http://logius.nl/digipoort/koppelvlakservices/1.2/"
elementFormDefault="qualified">
Это мне кажется запрошенной схемой. Так почему же SvcUtil не может найти схему с указанным пространством имен?
Странно то, что файл .WSDL
кажется правильным, потому что я могу создавать для этого клиентские классы в Visual Studio (меню: проект / добавить ссылку на службу). Но я не знаю, как создать классы для размещения службы.