我工作的公司与外部供应商合作开发我们的软件。我被赋予了创建我的第一个Windows服务以与供应商Web服务进行通信的任务。供应商向我们提供了他们的WSDL和39个XSD文件的副本。我将XSD文件转换为类文件没有任何问题。但是,当我尝试转换WSDL时,我收到以下错误:
使用wsdl.exe时
错误:无法导入绑定' BasicHttpBinding_ITrakManService' 来自命名空间' http://tempuri.org/'。 - 无法导入操作' AddRedactedDocument'。 - 元素' http://tempuri.org/:AddRedactedDocument'不见了。
使用svcutil.exe时
错误:无法导入wsdl:portType 详细信息:运行WSDL导入扩展时抛出异常: System.ServiceModel.Description.DataContractSerializerMessageContractImporter 错误:具有目标命名空间的模式' http://tempuri.org/'不可能 找到。
XPath到错误来源:
// WSDL:定义[@targetNamespace =' http://tempuri.org'] / WSDL:portType的[@name =' ITrakManService'] 错误:无法导入wsdl:binding详细信息:导入wsdl:binding依赖的wsdl:portType时出错。 XPath的 to wsdl:portType: // WSDL:定义[@targetNamespace =' http://tempuri.org/'] / WSDL:portType的[@name =' ITrakManService']
XPath到错误来源:
// WSDL:定义[@targetNamespace =' http://tempuri.org/'] / WSDL:结合[@name =' BasicHttpBinding_ITrakManService']
生成文件...警告:未生成任何代码。如果您尝试生成客户端,这可能是因为元数据 文件不包含任何有效的合同或服务或因为 发现所有合同/服务都存在于参考中 组件。验证您是否已将所有元数据文档传递给 工具。
我看到一些人引用将wsdl的imports部分更改为includes,但没有一个导入引用显式XSD,以供参考,这是导入部分。
-<wsdl:types>
-<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import namespace="http://tempuri.org/" schemaLocation="http://vcp01xred-grd.clerkdev.clerk.local:8090/TrakManWebService.svc?xsd=xsd0"/>
<xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="http://vcp01xred-grd.clerkdev.clerk.local:8090/TrakManWebService.svc?xsd=xsd1"/>
<xsd:import namespace="http://schemas.datacontract.org/2004/07/TrakManBusiness" schemaLocation="http://vcp01xred-grd.clerkdev.clerk.local:8090/TrakManWebService.svc?xsd=xsd2"/>
<xsd:import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" schemaLocation="http://vcp01xred-grd.clerkdev.clerk.local:8090/TrakManWebService.svc?xsd=xsd3"/>
</xsd:schema>
</wsdl:types>
很抱歉,如果这对您的WSDL专家来说是一个愚蠢的问题,这是我尝试做的一个。我也尝试过将这个XSD文件放在与WSDL相同的目录中,并且错误是相同的。
答案 0 :(得分:0)
经历过多次这样的情况,如果有多个xsds,wsdl到java转换(或其他失败)。一个对我有用的快速解决方案是,将所有XSD组合到一个XSD然后写下WSDL,这是一项非常痛苦的任务,但可能会有效。当存在循环和更深入的进口时,进口就会失败。