2009-05-27 6 views
1

Beim Versuch, einen Proxycode für diese wsdl file (von einem ASMX-Webdienst) zu generieren, meldet WsdlImporter (und Svcutil) einen Fehler. Ich dachte, WCF ist vollständig abwärtskompatibel mit ASMX-Webdiensten? Bitte helfenWsdlImporter Fehler beim Importieren einer WSDL von einem ASMX-Webdienst

Im Folgenden eine Ausgabe von svcutil ist (ich die gleichen Fehler erhalten mit 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'] 

Antwort

0

wsdl.exe stürzt ab, wenn diese WSDL importieren, so muss es mit etwas wirklich falsch sein. Selbst ein .NET 2.0-Client kann es nicht verwenden. Könnten Sie den Code des Web Service posten?

+0

Hallo Danke, danke für die Antwort. Leider habe ich keinen Zugriff auf den Code. – user20155

3

Sie nicht darum gebeten haben, aber es kann man am Ende mehr helfen ....

Die WSDL Sie zur Verfügung gestellt haben ist überdimensioniert und unter architected.

  1. Es gibt einen eindeutigen Namespace für fast jeden in der WSDL definierten complexType. Dies ist unnötig. Sie benötigen keinen XML-Namespace, um die Definition der Transaktionsnachricht zu speichern. Waaaaay zu viele Namespaces. Als ich es betrachtete, sah ich nur einen Namensraum (http:///blahblah/Finance/). Vielleicht brauchen Sie mehr, aber Sie brauchen nicht so viele. Die große Anzahl von Namespaces ist ein Grund dafür, dass das Tool wsdl.exe abgestürzt ist - es kann einfach nicht damit umgehen.

  2. Es gibt keine Modularität. Das XML-Schema sollte von der WSDL getrennt sein. Verwenden Sie für alle berechtigten Namespaces eine separate .xsd-Datei und führen Sie für dieses Schema einen xsd: import aus. Es könnte sein, dass Sie eine einzige XSD-Datei haben.

  3. Sie haben complexTypes, die von gemeinsamen Basistypen abgeleitet sind, aber nichts in den Basistypen. Keine Nachrichten-ID, keine Nachrichtenversion. Das scheint Ärger zu sein.

  4. Die WSDL, wie angegeben, ordnet den Porttyp nicht der Bindung zu. Dies ist ein Grund, warum die wsdl.exe keinen Code daraus generiert. wsdl.exe sucht nach einem Namensattribut für das Eingabeelement wsdl: input im Porttyp, das mit dem name-Attribut in der Eingabe wsdl: in der Bindung übereinstimmen muss.

  5. Sie haben zu viele Bindungen. Benötigen Sie wirklich SOAP1.1, SOAP1.2, HTTPGET und HTTPPOST? "Ja wirklich?" Wähle einen aus und bleib dabei.

Was jetzt zu tun?
Sie kontrollieren nicht die ASMX, nehme ich an, und Sie haben keinen Zugriff auf den Code. Was ich tun würde, ist, dass WSDL manuell überarbeitet wird, so dass es Sinn macht - alle diese Schemas in separate .xsd-Dateien zu trennen. Beginnen Sie dann mit einer einfachen Teilmenge der WSDL und holen Sie sie, damit sie funktioniert. Fügen Sie iterativ die komplexeren Stücke zurück, bis Sie das haben, was Sie brauchen.

Verwandte Themen