使用wsdl.exe /l:CS /serverInterface
,我从WDSL文档生成了一个C#接口。我已经在WCF类上实现了该接口。生成的服务在本地运行:
http://localhost:51454/TapasSim.svc
这显示默认网站。将?wsdl
追加到网址时会出现问题:
http://localhost:51454/TapasSim.svc?wsdl
与我的预期不同,此链接不会返回WDSL文档!相反,它指向您在没有?wsdl
的情况下获得的确切网页。因此,我无法引用Web服务。如果我运行svcutil.exe
,则会出现此错误:
如果你试图生成一个客户端,这可能是因为 元数据文档不包含任何有效的合同或服务或 因为发现所有合同/服务都存在于/ reference中 组件。验证您是否已将所有元数据文档传递给 工具。
但我认为该错误的原因与缺少对?wsdl
的回复的原因相同。
什么可能导致WCF .svc
服务不生成WSDL?
答案 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