【问题标题】:Adding service reference generates empty reference.cs and empty config.svcinfo files添加服务引用会生成空的reference.cs 和空的config.svcinfo 文件
【发布时间】:2014-03-22 08:47:12
【问题描述】:
【问题讨论】:
标签:
c#
web-services
wcf
soap
wsdl
【解决方案1】:
我使用命令svcutil http://www.eotd.org/search/server/terminology-service-soap.wsdl 运行svcutil 并得到以下错误:
C:\temp>svcutil
http://www.eotd.org/search/server/terminology-service-soap.wsdl
Microsoft (R) 服务模型元数据工具 [Microsoft (R) Windows (R)
通信基础,版本 4.0.30319.33440] 版权所有 (c)
微软公司。保留所有权利。
尝试从以下位置下载元数据
'http://www.eotd.org/search/server/terminology-service-soap.wsdl'
使用 WS-Metadata Exchange 或 DISCO。错误:无法导入
wsdl:portType 详细信息:运行 WSDL 时引发异常
导入扩展:
System.ServiceModel.Description.XmlSerializerMessageContractImporter
错误:带有目标命名空间的架构
'urn:iso:std:iso:ts:29002:-20:ed-1:tech:xml-schema:resolution-service-data'
找不到。错误源的 XPath:
//wsdl:definitions[@targetNamespace='urn:iso:std:iso:ts:29002:-20:ed-1:tech:web-service:terminology-service']/wsdl:portType[@na
我='terminology_service']
错误:无法导入 wsdl:binding 详细信息:导入时出错
wsdl:binding 所依赖的 wsdl:portType。 XPath 到
wsdl:端口类型:
//wsdl:definitions[@targetNamespace='urn:iso:std:iso:ts:29002:-20:ed-1:tech:web-service:terminology-service']/wsdl:portType[@n
ame='terminology_service'] XPath 到错误源:
//wsdl:definitions[@targetNamespace='urn:iso:std:iso:ts:29002:-20:ed-1:tech:web-service:terminology-service:soap']/wsdl:binding
[@name='terminology_service_SOAP_binding']
错误:无法导入 wsdl:port 详细信息:导入一个错误
wsdl:port 所依赖的 wsdl:binding。 XPath 到
wsdl:绑定:
//wsdl:definitions[@targetNamespace='urn:iso:std:iso:ts:29002:-20:ed-1:tech:web-service:terminology-service:soap']/wsdl:binding
[@name='terminology_service_SOAP_binding'] XPath 到错误源:
//wsdl:definitions[@targetNamespace='urn:iso:std:iso:ts:29002:-20:ed-1:tech:web-service:terminology-service:soap']/wsdl:service
[@name='terminology_service']/wsdl:port[@name='terminology_service_port']
正在生成文件... 警告:未生成任何代码。如果你在尝试
生成客户端,这可能是因为元数据文档确实
不包含任何有效的合同或服务,或者因为所有
发现合同/服务存在于 /reference 程序集中。
验证您是否将所有元数据文档传递给该工具。
警告:如果您想从模式生成数据协定
确保使用 /dataContractOnly 选项。
【解决方案2】:
您链接到的 WSDL 有效。但是,看起来微软工具无法遵循相对导入路径 - John Saunders 尝试了 svcutil.exe,而我只是尝试使用 wsdl.exe。
不幸的是,这里公开的 WSDL 充满了它们。
例如,
<wsdl:import namespace="urn:iso:std:iso:ts:29002:-20:ed-1:tech:web-service:terminology-service" location="terminology-service.wsdl"/>
链接到以下位置:http://www.eotd.org/search/server/terminology-service.wsdl
从这个文件中还有更多的导入:
<xsd:import namespace="urn:iso:std:iso:ts:29002:-5:ed-1:tech:xml-schema:identifier" schemaLocation="identifier.xsd"/>
<xsd:import namespace="urn:iso:std:iso:ts:29002:-20:ed-1:tech:xml-schema:resolution-service-data" schemaLocation="resolution-service-data.xsd"/>
<xsd:import namespace="urn:iso:std:iso:ts:29002:-20:ed-1:tech:xml-schema:terminology-service-data" schemaLocation="terminology-service-data.xsd"/>
<xsd:import namespace="urn:iso:std:iso:ts:29002:-6:ed-1:tech:xml-schema:terminology-service-dictionary" schemaLocation="terminology-service-dictionary.xsd"/>
<xsd:import namespace="urn:iso:std:iso:ts:29002:-20:ed-1:tech:xml-schema:ontology-service-data" schemaLocation="ontology-service-data.xsd"/>
所有这些也是相对导入路径。我查看了其中的几个 XSD 导入,它们还包括相对导入路径。
因此,最简单的做法是找到一种方法让您的工具遵循相对路径。您还可以手动下载每个资源文件,然后对其进行编辑以确保所有导入路径都是绝对的。但是,我不确定微软工具是否可以遵循文件系统上的路径,或者它们是否需要是 URI。
如果没有,那么您必须告诉供应商您不能使用该服务,因为您需要所有各种导入的绝对 URI。
编辑
其他人似乎在此处的本地导入路径上取得了成功https://stackoverflow.com/a/19912058/569662