使用 SvcUtil 从 WSDL 生成 WCF [ServiceContract]:找不到架构信息

Generate WCF [ServiceContract] from WSDL using SvcUtil: can't find Schema information

我有一个 .WSDL 文件,其中包含与服务通信的接口。 我需要创建一个提供 WSDL 中描述的功能的主机。

这意味着我必须创建一个带有 [ServiceContract] 的接口,可能还有一个或多个 类 带有 [DataContract].

我认为 SvcUtil.Exe 会为我做这件事。帮助说:

svcutil.exe can generate code for service contracts, ... from metadata documents. These metadata documents can be on disk or ...

所以我 运行 SvcUtil 在带有 .WSDL 的文件夹中时:

SvcUtil.exe Example.Wsdl

这给了我以下错误:

Error: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension:
System.ServiceModel.Description.DataContractSerializerMessageContractImporter Error: Schema with target namespace 'http://logius.nl/digipoort/koppelvlakservices/1.2/' could not be found.
XPath to Error Source:
//wsdl:definitions[@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 中为此创建客户端 类(菜单:项目/添加服务引用)。但我不知道如何创建 类 来托管服务

一个解决方案是在命令行中提到.XSD文件:

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

虽然这不能解释为什么 XSD 没有自动包含,但它会生成一个文件,其中包含请求的 [servicecontract]