web-dev-qa-db-fra.com

WCF: comment générer un seul document WSDL, sans WSDL: importer?

Je suis troublé par un problème ... Je tente de trouver un moyen de générer un seul document wsdl à partir de mon service WCF, c'est-à-dire sans lien vers des documents externes . J'ai utilisé FlatWsdl pour supprimer tous les liens xsd: import, le fichier généré lorsque jsdl contient toujours un lien vers un document wsdl externe via une déclaration wsdl: import:

<wsdl:import namespace="http://myurl/mynamespace"  
             location="http://myserver/myservice.svc?wsdl=wsdl0"/>  

Ce document contient en fait tous les schémas xsd en ligne, donc ... il y a un moyen de mettre également en ligne ce document wsdl externe, afin d'avoir un seul wsdl?

Merci beaucoup pour tout type d'aide. 

22
D_Guidi

(EDIT: La réponse précédente à propos de FlatWSDL a été supprimée car, comme vous l'avez signalé, il s'agissait d'éliminer xsd: import pas wsdl: import.)

Regardez cet article de blog: Contrôle généré WSDL dans WCF

"... il y a toujours un WSDL généré pour un URI d'espace de nom cible ..."

Avez-vous un espace de noms différent pour ServiceContract, DataContract, ServiceBehavior, etc.?

13
Vizu

Vous pouvez maintenant le faire de manière native dans .net 4.5 (beta). Il existe une option (? SingleWsdl au lieu de? Wsdl) pour indiquer au service de tout afficher dans un seul document wsdl. Plus d'informations sur les nouveautés ici: http://msdn.Microsoft.com/en-us/library/dd456789(v=vs.110).aspx

19
Irwin

Vous pouvez également utiliser le projet WCFExtras qui possède une extension pour créer un fichier WSDL unique.

WCFExtras

Une collection d'extensions WCF utiles y compris le support de l’en-tête de savon, WSDL documentation et plus.

La plate-forme WCF est très extensible et vous permet d'ajouter facilement des fonctionnalités qui ne font pas partie du produit de base . Ce projet contient des extensions J'avais besoin d'un projet basé sur la WCF: 

  • Prise en charge des en-têtes SOAP pour WCF Ajout de WSDL
  • Documentation à partir de commentaires de code source XML
  • Remplacer l'URL d'emplacement d'adresse SOAP
  • Fichier WSDL unique pour une meilleure compatibilité avec les anciens outils SOAP.

- http://wcfextras.codeplex.com/

4
Jochen

mon problème était dans les définitions de points de terminaison, qui sont dans l'espace de noms tempuri.org l'ajout de bindingNamespace aux déclarations de points de terminaison corrige mon problème . merci à tous de l'aide :)

2
D_Guidi

C'est une réponse tardive, mais j'ai eu le même problème avec quelques-uns de nos services WCF. Si vous êtes sur .NET 4.5, comme la réponse précédente, utilisez? SingleWSDL, mais si vous ne ciblez pas .NET 4.5, j'ai ajouté ce qui suit à mon web.config pour résoudre le problème ...

<useRequestHeadersForMetadataAddress>
  <defaultPorts>
    <add port="80" scheme="http" />
    <add port="443" scheme="https" />
  </defaultPorts>
</useRequestHeadersForMetadataAddress>

Cela va dans votre comportement. De cette façon, je n'ai pas eu à aplanir le WSDL car toutes les références étaient à MyURL au lieu de MyServer.

J'espère que cela aide les autres avec un problème similaire.

1
Jim

Vous devez ajouter des comportements supplémentaires, etc.

Voir ces articles ici:

http://my-tech-talk.blogspot.com/2008/07/adding-flatwsdl-to-wcf-webservice.html

http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx

Il y a plusieurs façons d'y parvenir.

Marc

1
marc_s

En plus de la réponse de Jim ci-dessus, si vous utilisez du code C # pour configurer directement un ServiceHost WCF:

using System.ServiceModel.Configuration;

et lors de la configuration de votre ServiceHost:

UseRequestHeadersForMetadataAddressBehavior urh = new UseRequestHeadersForMetadataAddressBehavior();
serviceHost.Description.Behaviors.Add(urh);

J'ai eu du mal à trouver cette information en ligne, aussi simple soit-elle. Si tout va bien, aide quelqu'un dans une situation similaire.

0
James Heliker