Reputation: 2683
How do I create a single flat WSDL file (with no external references from within) from an existing WCF service? This WSDL will be used (imported) into an older programming technology that only supports BasicHttpBinding. Please address your answer to a beginner.
Upvotes: 6
Views: 24581
Reputation: 2846
I had to do this, too. And I used the WSDLExtras library. It's not too big of a deal.
Here is a step by step instruction for using it:
Download the WCFExtras from here, extract it and add a reference to it in VS.
Add a reference to your Web.config/App.config like this:
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="wsdlExtensions" type="WCFExtras.Wsdl.WsdlExtensionsConfig, WCFExtras, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
</system.serviceModel>
Add the extension to your endpoint behavior and set the singleFile
attribute to true
<endpointBehaviors>
<behavior name="singleFileEndpointBehavior">
<wsdlExtensions singleFile="True" />
</behavior>
</endpointBehaviors>
Use the endpointbehavior for your service-endpoint.
<endpoint address="YourEndPoint/Address" binding="YourBinding" behaviorConfiguration="singleFileEndpointBehavior" contract="IYourContract">
This worked fine for me. You can also download a full example from the WCFExtras project page: ProjectPage
Edit: For the sake of completeness: You can use the ''?singleWsdl'' query parameter since .NET 4.5 as stated in Irwins answer. See the link he posted for more details.
Upvotes: 14
Reputation: 12829
You can now do this natively in .net 4.5 (beta). There is an option (?singleWsdl instead of ?wsdl) for telling the service to output everything in a single wsdl document. More info on the new stuff here: http://msdn.microsoft.com/en-us/library/dd456789(v=vs.110).aspx
Upvotes: 23