使用 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]
我有一个 .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]