Создать WCF [ServiceContract] из WSDL с помощью SvcUtil: не удается найти информацию о схеме

У меня есть .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 (меню: проект / добавить ссылку на службу). Но я не знаю, как создать классы для размещения службы.


person Harald Coppoolse    schedule 16.08.2018    source источник


Ответы (1)


Решение - упомянуть файл .XSD в командной строке:

SvcUtil.exe c:\...basefolder\digipoort-koppelvlak-1.2.xsd Example.Wsdl

Хотя это не объясняет, почему XSD не включается автоматически, он создает файл с запрошенным [servicecontract]

person Harald Coppoolse    schedule 16.08.2018