Error de wsdl.exe:No se puede importar el enlace '…' del espacio de nombres '…'

StackOverflow https://stackoverflow.com/questions/77534

  •  09-06-2019
  •  | 
  •  

Pregunta

Cuando ejecuto wsdl.exe en un WSDL que creé, aparece este error:

Error:No se puede importar el enlace 'SomeBinding' desde el espacio de nombres 'SomeNS'.

  • No se puede importar la operación 'someOperation'.
  • Estos miembros no podrán derivarse.

Estoy usando el estilo literal del documento y, hasta donde sé, sigo todas las reglas.

Para resumir, tengo un WSDL válido, pero a la herramienta no le gusta.

Lo que estoy buscando es si alguien tiene mucha experiencia con la herramienta wsdl.exe y conoce algún problema secreto que yo desconozco.

¿Fue útil?

Solución

Me encontré con el mismo mensaje de error.Después de investigar un rato, descubrí que se pueden proporcionar archivos xsd además del archivo wsdl.Así que incluimos/importamos archivos .xsd además de .wsdl al final del comando wsdl de la siguiente manera:

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

Wsdl dio algunas advertencias pero creó una interfaz de servicio correcta.

Otros consejos

A veces tienes que cambiar tu código.los nombres de las partes del mensaje no deberían ser iguales;)

<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>

a esto:

<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>

La solución @thehhv es correcta.Hay una solución alternativa que no requiere que agregues xsds a mano.

Vaya a su servicio entonces en lugar de ir ?wsdl ir a ?singleWsdl (captura de pantalla a continuación)

enter image description here

luego guarde la página como .wsdl archivo (ofrecerá .svc así que cámbialo)

luego abre Visual studio command prompt puede encontrarlo en (Win 7) Inicio -> Todos los programas -> Visual Studio 2013 -> Herramientas de Visual Studio -> Símbolo del sistema de herramientas nativas VS2013 x64 (podría ser algo similar)
Luego ejecute el siguiente comando en Visual studio command prompt (donde en lugar de C:\WebPricingService.wsdl es donde guardó su wsdl, a menos que suceda que pensemos de manera muy similar y elijamos el mismo nombre de archivo y ubicación, lo cual es preocupante)

wsdl.exe C:\WebPricingService.wsdl

Debería darle algunas advertencias como dijo @thehhv pero aún así generar el cliente en C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\WebPricingService.cs (o dondequiera que lo coloque en su máquina; verifique la salida de la consola donde dice "Escribiendo archivo")

enter image description here

Espero que esto te ahorre algo de tiempo.

En mi caso el problema fue diferente, y está bien descrito. aquí:

Siempre que el nombre de una parte es "parámetros", .Net asume que se utiliza doc/lit/wrapped y genera el proxy en consecuencia.Si aunque se usa la palabra "parámetros" el wsdl no está doc/lit/wrapped (como en el último ejemplo) .Net puede darnos algún error.¿Qué error?Adivinó correctamente:"Estos miembros no podrán derivarse".Ahora podemos entender qué significa el error:.Net intenta omitir el elemento raíz porque cree que se usa doc/lit/wrapped.Sin embargo, este elemento no se puede eliminar ya que no es ficticio; el usuario debe elegirlo activamente entre algunos tipos derivados.

La solución es la siguiente y funcionó perfectamente para mí:

La forma de solucionarlo es abrir el wsdl en un editor de texto y cambiar el nombre de la pieza de "parámetros" a "parámetros1".Ahora .Net sabrá generar un proxy doc/lit/bare.Esto significa que aparecerá una nueva clase contenedora como parámetro raíz en el proxy.Si bien esta API puede ser un poco más tediosa, no tendrá ningún efecto en el formato de la conexión y el proxy es totalmente interoperable.

(énfasis mío)

En caso de que alguien se tope con este muro, esto es lo que causó el error en mi caso:

Tengo una operación:

<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>

que toma una entrada:

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

y otra operación:

<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>

tomando una entrada:

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

Y los elementos de entrada son instancias de dos tipos:

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

Aquí está el truco: el reporting:FormatReportAsyncInputType El tipo extiende (se deriva de) el reporting:FormatReportInputType tipo.Eso es lo que parece confundir la herramienta y porque los "estos miembros no pueden derivarse". error.Puede evitarlo siguiendo la sugerencia en la respuesta aceptada.

En caso de que esté haciendo esto con UPS Shipping wsdl y desee cambiar las URL de desarrollo a producción cuando esté compilando para diferentes regiones (depuración, desarrollo, producción), etc.Utilizaría el siguiente comando para generar un archivo vb o C# desde Ship.wsdl y luego anularía los valores en este caso del archivo Ship.vb.

WSDL /Language:VB /out:"C:\wsdl\Ship.vb" "C:\wsdl\Ship.wsdl"  C:\wsdl\UPSSecurity.xsd  C:\wsdl\ShipWebServiceSchema.xsd  C:\wsdl\IFWS.xsd  C:\wsdl\common.xsd
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top