2009-05-27 9 views
1

Lors de la tentative de génération d'un code de proxy pour ce wsdl file (à partir d'un service Web ASMX), WsdlImporter (et svcutil) signale une erreur. Je pensais que WCF est totalement rétrocompatible avec les services Web ASMX? S'il vous plaît aiderErreur WsdlImporter lors de l'importation d'un fichier wsdl à partir d'un service Web ASMX

Ci-dessous est une sortie de svcutil (je reçois les mêmes erreurs à l'aide WsdlImporter)

 
Microsoft (R) Service Model Metadata Tool 
[Microsoft (R) Windows (R) Communication Foundation, Version 3.0.4506.648] 
Copyright (c) Microsoft Corporation. All rights reserved. 

Warning: The optional WSDL extension element 'header' from namespace 'http://sch 
emas.xmlsoap.org/wsdl/soap/' was not handled. 
XPath: //wsdl:definitions[@targetNamespace='http://mycompany.com/Enterprise/WebS 
ervice/Finance/']/wsdl:binding[@name='FinanceServiceSoap']/wsdl:operation[@name= 
'ProcessNonRefPayment']/wsdl:fault[@name='fault'] 

Warning: The optional WSDL extension element 'header' from namespace 'http://sch 
emas.xmlsoap.org/wsdl/soap/' was not handled. 
XPath: //wsdl:definitions[@targetNamespace='http://mycompany.com/Enterprise/WebS 
ervice/Finance/']/wsdl:binding[@name='FinanceServiceSoap']/wsdl:operation[@name= 
'ProcessRefPayment']/wsdl:fault[@name='fault'] 

Warning: The optional WSDL extension element 'header' from namespace 'http://sch 
emas.xmlsoap.org/wsdl/soap/' was not handled. 
XPath: //wsdl:definitions[@targetNamespace='http://mycompany.com/Enterprise/WebS 
ervice/Finance/']/wsdl:binding[@name='FinanceServiceSoap']/wsdl:operation[@name= 
'SearchPayments']/wsdl:fault[@name='fault'] 

Warning: The optional WSDL extension element 'header' from namespace 'http://sch 
emas.xmlsoap.org/wsdl/soap/' was not handled. 
XPath: //wsdl:definitions[@targetNamespace='http://mycompany.com/Enterprise/WebS 
ervice/Finance/']/wsdl:binding[@name='FinanceServiceSoap']/wsdl:operation[@name= 
'GetPayments']/wsdl:fault[@name='fault'] 

**Error: Cannot import wsdl:binding** 
Detail: The given key was not present in the dictionary. 
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://mycompany.com 
/Enterprise/WebService/Finance/']/wsdl:binding[@name='FinanceServiceSoap12'] 

**Error: Cannot import wsdl:port** 
Detail: There was an error importing a wsdl:binding that the wsdl:port is depend 
ent on. 
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://mycompany.com 
/Enterprise/WebService/Finance/']/wsdl:binding[@name='FinanceServiceSoap12'] 
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://mycompany.com 
/Enterprise/WebService/Finance/']/wsdl:service[@name='FinanceService']/wsdl:port 
[@name='FinanceServiceSoap12'] 

Répondre

0

se bloque lors de l'importation WSDL.exe ce WSDL, il doit y avoir quelque chose de vraiment mal avec. Même un client .NET 2.0 ne peut pas le consommer. Pourriez-vous poster le code du service Web?

+0

Salut Darin merci pour la réponse. Malheureusement, je n'ai pas accès au code. – user20155

3

Vous n'avez pas demandé, mais il peut vous aider plus à la fin ....

Le WSDL que vous avez fourni est trop conçu et sous-architecturé.

  1. Il existe un espace de nom unique pour à peu près tous les complexType définis dans le WSDL. Ceci est inutile. Vous n'avez pas besoin d'un espace de noms XML pour contenir la définition du message Transaction. Waaaaay trop d'espaces de noms. Quand je l'ai regardé, j'ai vu une justification pour un seul espace de noms (http:///blahblah/Finance/). Vous pourriez avoir besoin de plus, mais vous n'en avez certainement pas besoin. Le grand nombre d'espaces de noms est l'une des raisons pour lesquelles l'outil wsdl.exe s'est écrasé - il ne peut tout simplement pas le gérer.

  2. Il n'y a pas de modularité. Le schéma XML doit être distinct du WSDL. Pour les espaces de noms justifiés, utilisez un fichier .xsd distinct pour chacun et effectuez une importation xsd: pour ces schémas. Il se pourrait que vous ayez un seul fichier XSD.

  3. Vous avez des types complexes qui dérivent de types de base communs, mais rien dans les types de base. Pas d'identifiant de message, pas de version de message. Cela semble être un problème.

  4. Le fichier WSDL fourni ne mappe pas le porttype à la liaison. C'est une des raisons pour lesquelles wsdl.exe ne générera pas de code. wsdl.exe recherche un attribut de nom sur l'élément wsdl: input dans le porttype, qui doit correspondre à l'attribut name de l'entrée wsdl: de la liaison.

  5. Vous avez trop de liaisons. Allez-vous vraiment avoir besoin de SOAP1.1, SOAP1.2, HTTPGET et HTTPPOST? Vraiment? Choisissez en un et gardez le.

Que faire maintenant?
Vous ne contrôlez pas l'ASMX, je suppose, et vous n'avez pas accès au code. Ce que je ferais, c'est de retravailler manuellement ce WSDL pour que cela soit logique - en séparant tous ces schémas en fichiers .xsd séparés. Puis commencez avec un sous-ensemble simple du WSDL, et obtenez-le pour que cela fonctionne. Ajoutez itérativement les pièces les plus complexes jusqu'à ce que vous ayez ce dont vous avez besoin.

Questions connexes