Ошибка WsdlImporter при импорте wsdl из веб-службы ASMX - PullRequest
1 голос
/ 27 мая 2009

При попытке создать прокси-код для этого wsdl-файла (из веб-службы ASMX) WsdlImporter (и svcutil) сообщает об ошибке. Я думал, что WCF полностью обратно совместим с веб-сервисами ASMX? Пожалуйста, помогите

Ниже приведен вывод svcutil (я получаю те же ошибки, используя 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']

Ответы [ 2 ]

3 голосов
/ 27 мая 2009

Вы не просили об этом, но это может помочь вам больше в конце ....

WSDL, который вы предоставили, является чрезмерно разработанным и недостаточно разработанным.

  1. Существует уникальное пространство имен практически для каждого complexType, определенного в WSDL. Это не нужно. Вам не нужно пространство имен XML для хранения определения сообщения транзакции. Вааааааа слишком много пространств имен. Когда я посмотрел на него, я увидел оправдание только для одного пространства имен (http:///blahblah/Finance/). Вам может понадобиться больше, но, конечно, вам не нужно так много. Огромное количество пространств имен является одной из причин сбоя инструмента wsdl.exe - он просто не может с ним справиться.

  2. Модульности нет. Схема XML должна быть отделена от WSDL. Для тех пространств имен, которые оправданы, используйте отдельный файл .xsd для каждого и выполните xsd: import для этой схемы. Это может быть один файл XSD.

  3. У вас есть complexTypes, которые являются производными от общих базовых типов, но ничего из базовых типов. Нет идентификатора сообщения, нет версии сообщения. Это похоже на проблему.

  4. WSDL, как указано, не отображает тип порта для привязки. Это одна из причин, по которой wsdl.exe не будет генерировать из него код. wsdl.exe ищет атрибут name в элементе wsdl: input в типе порта, который должен соответствовать атрибуту name в wsdl: input в привязке.

  5. У вас слишком много привязок. Вам действительно нужны SOAP1.1, SOAP1.2, HTTPGET и HTTPPOST? В самом деле? Выберите один и придерживайтесь его.

Что теперь делать?
Я полагаю, вы не управляете ASMX, и у вас нет доступа к коду. Что бы я сделал, это вручную переделал этот WSDL, чтобы это имело смысл - разделив все эти схемы на отдельные файлы .xsd. Затем начните с простого подмножества WSDL и получите его, чтобы он работал. Итеративно добавляйте обратно более сложные фрагменты, пока не получите то, что вам нужно.

0 голосов
/ 27 мая 2009

wsdl.exe вылетает при импорте этого WSDL, поэтому должно быть что-то действительно не так. Даже клиент .NET 2.0 не может его использовать. Не могли бы вы опубликовать код веб-службы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...