【问题标题】:couldnt add service reference in visual studio无法在 Visual Studio 中添加服务引用
【发布时间】:2018-07-29 19:28:42
【问题描述】:

我可以通过浏览器获取服务的xml内容

但不知何故无法在 Visual Studio 中添加作为服务引用与 ?wsdl 扩展名相同的链接。

Visual Studio 中的错误信息;

url 处的文档 http://****?wsdl 不是 识别为已知的文档类型。每个已知的错误消息 type 可以帮助您解决问题: - 来自“XML Schema”的报告是“W3C XML Schema 的根元素应该是,它的命名空间应该是 'http://www.w3.org/2001/XMLSchema'.'。 - 来自“DISCO 文档”的报告是“URL http://**** 的发现文档?wsdl 不能 找到了。'。

我该如何解决?

【问题讨论】:

  • http://****?wsdl 存在吗?用浏览器打开 WSDL 链接并检查。

标签: wcf wsdl


【解决方案1】:

您是否在 WCF 中启用了元数据发现?

首先,如果您以声明方式设置 WCF 服务(您也可以通过编程方式执行此操作),则需要在 web.config 中向服务添加这样的 mex(元数据交换)端点:

<service name="myservice">
 <endpoint contract="IMetadataExchange" binding ="mexHttpBinding" address="mex" />
 <endpoing contract="SomeAssembly.SomeService" address="SomeService" binding="basicHttpBinding" ... 

请注意,我不建议您使用 BasicHttpBinding,因为它默认没有设置安全性,例如使用 WsHttpBinding。

现在还要添加这个 serviceBehavior:

<serviceBehaviors>
 <serviceMetadata httpGetEnabled="true" />

您会发现这个文档有据可查,并且是一个很好的示例,例如: WCF Service Behaviors – How to Generate Service Metadata to simplify WCF Client Application Development

然后再次检查 WSDL 链接是否适用于您的服务。如果仍然无法正常工作,您可能需要检查 IIS 的已安装功能,可能是您的 IIS 配置和设置不正确。

【讨论】: