添加服务引用会生成空的reference.cs 和空的config.svcinfo 文件
Posted
技术标签:
【中文标题】添加服务引用会生成空的reference.cs 和空的config.svcinfo 文件【英文标题】:Adding service reference generates empty reference.cs and empty config.svcinfo files 【发布时间】:2014-03-22 08:47:12 【问题描述】:我正在尝试连接到此网络服务: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,但到目前为止没有任何效果。
任何人都可以真正连接到这个网络服务吗?关于问题是什么的任何想法?
【问题讨论】:
你解决了这个问题吗? 【参考方案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://***.com/a/19912058/569662
【讨论】:
以上是关于添加服务引用会生成空的reference.cs 和空的config.svcinfo 文件的主要内容,如果未能解决你的问题,请参考以下文章
由于 DuplexBinding,WCF 服务引用生成一个空的 reference.cs
VS2008调用webservice 没有生成Reference.cs文件 所以不能调用方法