Service web WCF ne retourne pas WSDL
À l'aide de wsdl.exe /l:CS /serverInterface
, j'ai généré un C# interface à partir d'un document WSDL. J'ai mis en place cette interface sur un WCF classe. Le service qui en résultent s'exécute localement:
http://localhost:51454/TapasSim.svc
Cela montre que le site par défaut. Le problème apparaît lorsque je les ajoute ?wsdl
à l'URL:
http://localhost:51454/TapasSim.svc?wsdl
Contrairement à ce que j'attendais, ce lien n'est pas le retour d'un document WSDL! Au lieu de cela, il nous ramène à l'exacte de la page web que vous obtenez sans le ?wsdl
. En conséquence, je ne peut pas référencer le service web. Si je lance svcutil.exe
il donne cette erreur:
Si vous essayez de générer un client, ce pourrait être parce que le
les métadonnées des documents ne contiennent pas de contrats ou de services ou
parce que tous les contrats/services ont été découverts à exister dans /référence
assemblées. Vérifiez que vous avez passé tous les documents de métadonnées à l'
outil de.
Mais je m'attends à ce que l'erreur d'avoir la même cause que l'absence de réponse à ?wsdl
.
Ce qui pourrait causer un WCF .svc
service de ne pas générer le WSDL?
- Avez-vous d'activer les "métadonnées HTTP Get" paramètre dans le fichier de configuration de service?
- Oui,
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
. Si vous désactiver cette fonction, le site n'affiche pas de lien pour le WSDL. - Avez-vous mis en place le mex point de terminaison?
- Aucun MEX point est configuré (comment pourrais-je aller sur le faire?) L'généré de l'assistant de service WCF ne comprend pas un MEX point de terminaison, mais encore, elle génère un fichier WSDL.
- Pouvez-vous s'il vous plaît poster votre fichier de configuration du service (app.config ou web.config)?
- Posté sur pastebin
- Jetez un oeil à ce pour un exemple de la façon d'ajouter le point de terminaison: msdn.microsoft.com/en-us/library/ms734786.aspx
- Le MEX point de terminaison semble en option, l'assistant généré webservice fonctionne très bien sans elle.
- Si cela fonctionne très bien sans elle, pourquoi êtes-vous de poster ici? Je dirais qu'il ne fonctionne pas bien parce qu'il ne fait pas ce que vous voulez, ce qui est précisément ce que le mex point de terminaison est pour, mex être un acronyme pour l'échange de métadonnées et de tous.
- La valeur par défaut
File -> New Project -> WCF Website
génère WSDL sans MEX point de terminaison. Le lien de Kwai commentaire dit littéralementThis section is optional with the default configuration introduced in .NET Framework 4.
. En fait, j'ai ajouté MEX et il n'a pas aidé.
Vous devez vous connecter pour publier un commentaire.
Il s'avère que le problème a été le mélange de ces deux technologies.
wdsl.exe
appartient à l'ancienne "Références Web" qui sont antérieurs à la WCF. La plus récente de l'outil desvcutil.exe
est conçu pour générer de la WCF "Service de Référence" interfaces.Donc ce qui s'est passé, WCF cherché
[ServiceContract]
et[OperationContract]
attributs. Quand il ne trouve pas de toute, il en silence n'a rien fait.Le silence de la suppression de cette condition est ennuyeux, pour dire le moins. Une erreur de ce type
No service with [ServiceContract] attribute found
aurait vraiment aidé.Notez que vous pouvez ajouter manuellement des
[ServiceContract]
, mais qui vous laisse avec la moitié "Service de Référence" de la moitié "de la Référence Web". Le résultat ne sera probablement pas travailler.J'ai eu un problème avec l'obtention de l'WSDL via la fenêtre de IE fournis par le démarrage de la session de débogage. J'ai dû utiliser une fenêtre séparée, assurant j'ai mis le HTTPS dans l'URL.
Nous sommes à l'hébergement de nos services sur 443 (SSL). Lorsque vous démarrez le débogueur, même si les fenêtres IE montre http: (80), il a été à l'écoute de la circulation sur 443.
Pour info, ceci est contrôlé par le projet de réglage de niveau SSL