WCF 4服务的平面WSDL

时间:2011-04-27 08:11:37

标签: wcf wsdl wcf-4

使用WCF 3.5和FlatWsdl EndpointBehavior from Christian Weyer,我能够为我的WCF服务获取单个平面WSDL文件,而不需要任何<import>指令。

现在使用WCF 4,由于某种原因,这不再起作用了。

我已经尝试了很多博客条目中描述的所有内容,包括使用WcfExtras行为扩展。

他们都是指Chr。 Weyers解决方案或推荐WcfExtras。 我还确保为绑定,ServiceContract和ServiceBehavior指定了相同的命名空间。

在自定义服务主机中,当要注入FlatWsdlExtension时,Description.Endpoints集合始终为空。我尝试使用或不使用地址配置我的服务端点,到目前为止没有运气。

为了获得WCF 4服务的单一平面WSDL,我需要做些什么?

感谢您的回答。

2 个答案:

答案 0 :(得分:4)

我遇到了这个确切问题。经过几次尝试,我终于通过以下方式开始工作:

  

Read this blog post in full.

     

确保在以下内容中指定完全相同的命名空间属性:ServiceContract,ServiceBehavior和bindingNamespace(.config-&gt; services / service / endpoint section)。

     

请注意this problem,我曾经遇到过这个问题。

     

Download此zip文件,并在项目的某处包含FlatWsdl / Extensions:FlatWsdl.cs,FlatWsdlServiceHost.cs和FlatWsdlServiceHostFactory.cs。

     

确保在.svc文件的ServiceHost Factory属性中为您的FlatWsdlServiceHostFactory.cs版本(当然减去.cs)指定完全限定的类名。

我今天尝试过WcfExtras等等 - 可能会有更多或更少的东西,但这些步骤终于让我走了。祝你好运!

[编辑]

答案 1 :(得分:2)

迟到的答案,希望它有所帮助。

有同样的问题,通过手动将行为添加到serviceendpoint来解决它:

   FlatWsdlServiceHost serviceHost = new FlatWsdlServiceHost(typeof(MyService));

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