如何在没有访问服务的情况下将WCF WSDL和XSD共享给客户端?

时间:2012-10-31 09:23:44

标签: c# wcf xsd wsdl

我尝试生成WSDL,然后使用客户端手动在WSDL中找到每个XSD。该服务目前只在我的本地主机上,尚未发布。

客户端收到以下错误:

  

该文件已被理解,但无法处理。   WSDL文档包含无法解析的链接。   下载'http:// localhost:xxxx / MyService.svc?xsd = xsd0'时出错。   无法连接到远程服务器无法建立连接,因为   目标机器主动拒绝它127.0.0.1:xxxx

如何生成和共享服务WSDL和XSD,以便他们可以开始编写客户端代码(无需访问服务atm?

修改 这些问题与WSDL / XSD中的问题有关。

WSDL

<xsd:schema targetNamespace="http://tempuri.org/Imports">
    <xsd:import schemaLocation="http://localhost:xxxx/MyService.svc?xsd=xsd0" 
           namespace="http://tempuri.org/"/>
    <xsd:import schemaLocation="http://localhost:xxxx/MyService.svc?xsd=xsd1"  
           namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
    <xsd:import schemaLocation="http://localhost:xxxx/MyService.svc?xsd=xsd2" 
           namespace="**MYNAMESPACE**"/>
</xsd:schema>

XSD

<xs:import schemaLocation="http://localhost:xxxx/MyService.svc?xsd=xsd1" 
  namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>

编辑2: 感谢@The Indian Programmmer我能够生成一个代理类来使用此命令进行编程:

"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\svcutil.exe" -noconfig -namespace:*,SERVICE.INTERFACE.NAMESPACE -serializer:datacontractserializer https://My-PC/SvrLocation/MyService.svc?wsdl (托管在本地IIS中)

2 个答案:

答案 0 :(得分:7)

首先通过运行您的服务浏览到您的wsdl。

然后单独浏览到WSDL中的所有xsd,并将它们保存为xsd文件。

使用新的xsd相对路径更新您的wsdl ..只需用其名称替换xsd的整个链接。

Replace http://localhost:xxxx/MyService.svc?xsd=xsd0 with respective FileName

<xsd:schema targetNamespace="namespace">
<xsd:import schemaLocation="Messages.xsd" namespace="namespace"/>
<xsd:import schemaLocation="DomainTypes.xsd" namespace="namespace"/>
<xsd:import schemaLocation="StreamBody.xsd" namespace="namespace"/>
</xsd:schema>

已更新:如何生成代理文件

svcutil  -noconfig -namespace:*,ServiceNameSpace -serializer:datacontractserializer  "Service.wsdl" "DomainTypes.xsd" "Messages.xsd" "StreamBody.xsd"

所有文件都应位于同一文件夹中。

答案 1 :(得分:0)

您可以从localhost下载wsdl文件。 为此,您可以转到&#34; http://localhost:xxx/MyService.svc?wsdl&#34;
基于此wsdl,您可以使用wsdl工具生成服务代理 有关如何生成代理的详细信息,请参阅this question