Подтвердить что ты не робот

Wsdl.exe Ошибка: не удалось импортировать привязку '...' из пространства имен '...'

При запуске wsdl.exe в WSDL, который я создал, я получаю эту ошибку:

Ошибка: не удалось импортировать привязку "SomeBinding" из пространства имен "SomeNS".

  • Невозможно импортировать операцию "someOperation".
  • Эти члены не могут быть получены.

Я использую стиль document-literal, и, насколько мне известно, я соблюдаю все правила.

Подводя итог, у меня есть действующий WSDL, но инструмент ему не нравится.

Я ищу, если кто-то имеет большой опыт работы с инструментом wsdl.exe и знает о какой-то секретной информации, которую я не знаю.

4b9b3361

Ответ 1

Я столкнулся с тем же сообщением об ошибке. Покопавшись некоторое время, выяснилось, что в дополнение к файлу wsdl можно предоставить xsd файлы. Так что включены/импортированы файлы .xsd в дополнение к .wsdl в конце команды wsdl следующим образом:

wsdl.exe myWebService.wsdl myXsd1.xsd myType1.xsd myXsd2.xsd...

Wsdl дал несколько предупреждений, но создал удобный сервисный интерфейс.

Ответ 2

иногда нужно менять код ur. имена сообщений не должны совпадать;)

<wsdl:message name="AnfrageRisikoAnfrageL">
    <wsdl:part name="parameters" element="his1_0:typeIn"/>
</wsdl:message>
<wsdl:message name="AnfrageRisikoAntwortL">
    <wsdl:part name="parameters" element="his1_0:typeOut"/>
</wsdl:message>

:

<wsdl:message name="AnfrageRisikoAnfrageL">
    <wsdl:part name="in" element="his1_0:typeIn"/>
</wsdl:message>
<wsdl:message name="AnfrageRisikoAntwortL">
    <wsdl:part name="out" element="his1_0:typeOut"/>
</wsdl:message>

Ответ 3

Решение

@thehhv является правильным. Там обход, который не требует от вас добавить xsd вручную.

Перейдите в свою службу, а затем перейдите в ?wsdl, перейдите к ?singleWsdl (снимок экрана ниже)

enter image description here

затем сохраните страницу как .wsdl file (она предложит .svc, так что измените ее)

затем откройте Visual studio command prompt, вы можете найти его в (Win 7) Start → All Programs → Visual studio 2013 → Инструменты Visual Studio → VS2013 x64 Нативные инструменты Командная строка (может быть что-то похожее)
Затем запустите следующую команду в Visual studio command prompt (где вместо C:\WebPricingService.wsdl вы сохранили свой wsdl, если только так не получилось, что мы считаем очень похожим и выбираем одно и то же имя и местоположение файла, которые беспокоятся)

wsdl.exe C:\WebPricingService.wsdl

Он должен дать вам несколько предупреждений, как сказал @thehhv, но все еще генерировать клиента в C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\WebPricingService.cs (или где бы он ни размещался на вашем компьютере). Проверьте вывод консоли, где он читает "Написание файла" )

enter image description here

Надеюсь, это сэкономит вам некоторое время.

Ответ 4

В моем случае проблема была другой и хорошо описана здесь:

Всякий раз, когда имя части является "параметрами".Net считается, что doc/lit/wrapped используется и соответственно генерирует прокси. Если хотя бы слово "параметры" используется, wsdl не является документом doc/lit/wrapped (как в последнем примере).Net может дать нам некоторую ошибку. Какая ошибка? Вы правильно поняли: "Эти члены не могут быть получены". Теперь мы можем понять, что означает ошибка:.Net пытается опустить корневой элемент, поскольку он считает, что используется doc/lit/wrapped. Однако этот элемент нельзя удалить, так как он не является манекеном - он должен быть активно выбран пользователем из нескольких производных типов.

Исправление выглядит следующим образом и отлично работает для меня:

Чтобы исправить это, откройте wsdl в текстовом редакторе и измените имя части с "параметров на " parameters1 ". Теперь .Net будет знать, чтобы создать doc/lit/bare proxy. Это означает, что новый класс-оболочка появится в качестве корневого параметра в прокси-сервере. Хотя это может быть немного более утомительным api, это не повлияет на формат проводов, и прокси полностью совместимо.

(выделение мной)

Ответ 5

Если кто-то ударит по этой стене, вот что вызвало ошибку в моем случае:

У меня есть операция:

<wsdl:operation name="FormatReport">
  <wsdl:documentation>Runs a report, which is returned as the response</wsdl:documentation>
  <wsdl:input message="FormatReportRequest" />
  <wsdl:output message="FormatReportResponse" />
</wsdl:operation>

который принимает вход:

<wsdl:message name="FormatReportRequest">
  <wsdl:part name="parameters" element="reporting:FormatReportInput" />
</wsdl:message>

и другая операция:

<wsdl:operation name="FormatReportAsync">
  <wsdl:documentation>Creates and submits an Async Report Job to be executed asynchronously by the Async Report Windows Service.</wsdl:documentation>
  <wsdl:input message="FormatReportAsyncRequest" />
  <wsdl:output message="FormatReportAsyncResponse" />
</wsdl:operation>

принимает ввод:

  <wsdl:message name="FormatReportAsyncRequest">
    <wsdl:part name="parameters" element="reporting:FormatReportInputAsync" />
  </wsdl:message>

И входными элементами являются экземпляры двух типов:

<xsd:element name="FormatReportInput" type="reporting:FormatReportInputType"/>
<xsd:element name="FormatReportInputAsync" type="reporting:FormatReportAsyncInputType"/>

Вот улов - тип reporting:FormatReportAsyncInputType расширяет (выводит) тип reporting:FormatReportInputType. То, что, кажется, запутывает инструмент и вызывает "Эти члены не могут быть получены". ошибка. Вы можете обойти это, следуя предложению в принятом ответе.