我正在尝试连接此网络服务:http://www.eotd.org/search/server/terminology-service-soap.wsdl
网络服务网站:http://www.eccma.org/resources/webservices.php
当我在C#中添加服务引用时,生成的reference.cs文件为空,并且config.svcinfo和config91.svcinfo在其行为,绑定和端点中没有任何内容。 此外,不确定原因,但在创建的服务引用中有两个不同的wsdl文件。
我已尝试在SO上发布的解决方案,例如取消选中“在引用的程序集中重用类型”并将集合类型更改为Generic.List但到目前为止没有任何工作。
任何人都可以实际连接到此网络服务吗?关于问题是什么的任何想法?
答案 0 :(得分:0)
我使用命令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) Communication Foundation,Version 4.0.30319.33440] Copyright(c) 微软公司。保留所有权利。
尝试从中下载元数据 'http://www.eotd.org/search/server/terminology-service-soap.wsdl' 使用WS-Metadata Exchange或DISCO。错误:无法导入 wsdl:portType详细信息:运行WSDL时抛出异常 进口延期: System.ServiceModel.Description.XmlSerializerMessageContractImporter 错误:具有目标命名空间的架构 '瓮:ISO:STD:ISO:TS:29002:-20:ED-1:技术:XML的模式:分辨率服务的数据' 无法找到。 XPath到错误源: // WSDL:定义[@的targetNamespace = '瓮:ISO:STD:ISO:TS:29002:-20:ED-1:技术:web服务:术语服务'] / WSDL:portType的[@na 我= 'terminology_service']
错误:无法导入wsdl:binding详细信息:导入时出错 wsdl:binding依赖的wsdl:portType。 XPath到 WSDL:端口类型: // WSDL:定义[@的targetNamespace = '瓮:ISO:STD:ISO:TS:29002:-20:ED-1:技术:web服务:术语服务'] / WSDL:portType的[@n ame ='terminology_service'] XPath到错误源: // WSDL:定义[@的targetNamespace = '瓮:ISO:STD:ISO:TS:29002:-20:ED-1:技术:web服务:术语服务:皂'] / WSDL:结合 [@名称= 'terminology_service_SOAP_binding']
错误:无法导入wsdl:port详细信息:导入时出错 wsdl:wsdl:port依赖的绑定。 XPath到 WSDL:结合: // WSDL:定义[@的targetNamespace = '瓮:ISO:STD:ISO:TS:29002:-20:ED-1:技术:web服务:术语服务:皂'] / WSDL:结合 [@ name ='terminology_service_SOAP_binding'] XPath到错误源: // WSDL:定义[@的targetNamespace = '瓮:ISO:STD:ISO:TS:29002:-20:ED-1:技术:web服务:术语服务:皂'] / WSDL:服务 [@名称= 'terminology_service'] / WSDL:端口[@名称= 'terminology_service_port']
生成文件...警告:未生成任何代码。如果你在尝试 生成客户端,这可能是因为元数据文档确实如此 不包含任何有效的合同或服务或因为所有 发现合同/服务存在于/参考集合中。 验证您是否已将所有元数据文档传递给该工具。
警告:如果您想从架构生成数据合同 确保使用/ dataContractOnly选项。
答案 1 :(得分:0)
您链接的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