WCF Web服务不返回WSDL

时间:2013-01-29 18:05:34

标签: c# wcf wsdl

使用wsdl.exe /l:CS /serverInterface,我从WDSL文档生成了一个C#接口。我已经在WCF类上实现了该接口。生成的服务在本地运行:

http://localhost:51454/TapasSim.svc

这显示默认网站。将?wsdl追加到网址时会出现问题:

http://localhost:51454/TapasSim.svc?wsdl

enter image description here

与我的预期不同,此链接不会返回WDSL文档!相反,它指向您在没有?wsdl的情况下获得的确切网页。因此,我无法引用Web服务。如果我运行svcutil.exe,则会出现此错误:

  

如果你试图生成一个客户端,这可能是因为   元数据文档不包含任何有效的合同或服务或   因为发现所有合同/服务都存在于/ reference中   组件。验证您是否已将所有元数据文档传递给   工具。

但我认为该错误的原因与缺少对?wsdl的回复的原因相同。

什么可能导致WCF .svc服务不生成WSDL?

2 个答案:

答案 0 :(得分:7)

事实证明,问题在于混合了两种技术。 wdsl.exe属于早于WCF的旧“Web引用”。较新的工具svcutil.exe用于生成WCF“服务引用”接口。

所以发生的事情是WCF查找了[ServiceContract][OperationContract]属性。当它找不到任何东西时,它默默地什么也没做。

至少可以说,对此情况的无声抑制令人讨厌。像No service with [ServiceContract] attribute found这样的错误确实会有所帮助。

请注意,您可以手动添加[ServiceContract],但这将使您的“服务参考”一半“Web参考”。结果可能不起作用。

答案 1 :(得分:0)

通过启动调试会话提供的IE窗口获取WSDL时出现问题。我不得不使用一个单独的窗口,确保我将HTTPS放在URL中。

我们正在443(SSL)上托管我们的服务。当您启动调试器时,即使IE窗口显示http:(80),它也在侦听443上的流量。
仅供参考,这是通过项目级别设置来控制的启用SSL