WCF 4服务的平坦WSDL

9
使用WCF 3.5和Christian Weyer的FlatWsdl EndpointBehavior,我能够获得一个单一的扁平化WSDL文件,用于我的WCF服务而没有任何<import>指令。
现在,使用WCF 4,由于某些原因,这种方法不再适用。
我尝试了很多博客文章中描述的所有方法,包括使用WcfExtras行为扩展。它们要么参考Chr.Weyers解决方案,要么推荐WcfExtras。我还确保为绑定、ServiceContract和ServiceBehavior指定了相同的命名空间。
在自定义服务主机中,当要注入FlatWsdlExtension时,Description.Endpoints集合始终为空。我尝试了配置我的服务端点,有或没有地址,但目前没有成功。
我需要做什么才能获得一个单一的扁平化WSDL,用于我的WCF 4服务?
谢谢任何回答。

2
供参考,.net 4.5现在原生支持此功能。请参见https://dev59.com/fnNA5IYBdhLWcg3wI6V4#8656173。 - piers7
1
谢谢你告诉我。这个应该早就成为框架的一部分了! - kay.herzam
2个回答

4
我遇到了这个确切的问题。今天尝试了几次后,最终通过以下方式解决了它:

阅读完整博客文章。

确保在 ServiceContract、ServiceBehavior 和 bindingNamespace (.config->services/service/endpoint 部分) 中指定完全相同的命名空间属性。

请注意 此问题,我曾经遇到过。

下载 此 zip 文件并将 FlatWsdl/Extensions:FlatWsdl.cs、FlatWsdlServiceHost.cs 和 FlatWsdlServiceHostFactory.cs 包含在您的项目中的某个位置。

请确保在 .svc 文件的 ServiceHost 工厂属性中指定 FlatWsdlServiceHostFactory.cs 的完全限定类名(当然不包括 .cs)。

我今天尝试了WcfExtras等其他工具--可能还有更多或更少的内容,但是这些步骤最终让我成功了。祝你好运!
[编辑]

2
当我尝试使用提供的链接下载zip文件时,出现“您要查找的资源已被删除、更改名称或暂时不可用。”错误。 - Max
可能是因为现在Visual Studio原生支持此功能。 - Dave Ziegler

2
晚回答,希望能帮到某些人。
遇到了同样的问题,通过手动将行为添加到服务端点解决:
   FlatWsdlServiceHost serviceHost = new FlatWsdlServiceHost(typeof(MyService));

   ServiceEndpoint endp = serviceHost.AddServiceEndpoint(typeof(IMyService), new BasicHttpBinding(), "MyService");
   endp.Behaviors.Add(new FlatWsdl());

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