使用扁平化的WSDL从WCF服务中提取WSDL

3
我有一个WCF Web服务,需要提供客户端wsdl文件。
以前我在.dll上使用svcutil一切都很好。
然而,最近我实现了工厂来展平wsdl文件(re:http://wcfextras.codeplex.com/)。
我的问题是:是否有任何方法可以使用svcutil在.svc上提取Flattened .WSDL文件,或者可能在本地webdev服务器运行时通过某种方式访问Web服务以检索.WSDL文件?
据我所知,如果我导航到本地Web开发服务器(http://localhost:2916/Service.svc?wsdl),如果我查看源代码并将其保存为.wsdl,则这是错误的,并且不会提供所有相关信息。
注意:请参阅下面如何在.svc文件中使用工厂...
<% @ServiceHost Factory="CompanyName.ServiceModel.Extensions.Description.FlatWsdlServiceHostFactory" language=c# Service="CompanyName.WebServices.Service"%> 

谢谢,Steven

1个回答

6

是的,即使您安装了扁平化WSDL的扩展程序,仍应该能够使用svcutil从服务中提取WSDL。

要从正在运行的服务中下载元数据文档,请使用此命令:

svcutil /t:metadata http://service/metadataEndpoint

您需要将URL指向在配置文件中定义的元数据终结点,例如已定义为使用“mexHttpBinding”或“mexTcpBinding”和“IMetadataExchange”合同的终结点。

如果您没有定义任何元数据交换终结点,则显然无法检索该信息。


你好Marc,感谢你的帮助...我有一个问题,我能够添加mexHttpBinding并使用svcutil /t:metadata获取wsdl你知道为什么它会创建两个文件吗? filename1.wsdl filename.wsdl带有名称中的“1”的文件具有大量的soap:binding soap:body soap:operation,ext...而没有名称中没有“1”的文件实际上只包含wsdl和xsd标记。我需要向客户提供两个文件吗?再次感谢您的帮助。 史蒂文。 - stevenrosscampbell
1
我相信如果我没记错的话,WCF运行时会为每个命名空间生成一个WSDL。您可以将XSD压缩到WSDL中,但似乎无法“合并”具有不同命名空间的两个WSDL部分。是的,我相信您需要这两个文件才能正常工作(一个引用另一个)。 - marc_s
嗨,马克再次感谢。好消息是,客户已经决定准备直接使用Web服务 :) 不需要我再生成了(虽然在你的帮助下我学到了很多)祝一切顺利。 史蒂文 - stevenrosscampbell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接