Erreur wsdl.exe: impossible d'importer la liaison '& # 8230;' de l'espace de noms '& # 8230;'

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

  •  09-06-2019
  •  | 
  •  

Question

Lorsque j'exécute wsdl.exe sur un WSDL que j'ai créé, le message d'erreur suivant s'affiche:

  

Erreur: impossible d'importer la liaison 'SomeBinding' à partir de l'espace de noms 'SomeNS'.

     
      
  • Impossible d'importer l'opération 'someOperation'.
  •   
  • Ces membres ne peuvent pas être dérivés.
  •   

J'utilise le style littéral de document et, au meilleur de ma connaissance, je respecte toutes les règles.

Pour résumer, j'ai un WSDL valide, mais l'outil ne l'aime pas.

Ce que je recherche, c’est si quelqu'un a beaucoup d'expérience avec l'outil wsdl.exe et qu'il connaît l'existence d'un secret que je ne connais pas.

Était-ce utile?

La solution

Je suis tombé sur le même message d'erreur. Après avoir creusé pendant un moment, nous avons découvert qu'il était possible de fournir des fichiers xsd en plus du fichier wsdl. Donc, inclus / importé des fichiers .xsd en plus de .wsdl à la fin de la commande wsdl comme suit:

  

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

Wsdl a émis des avertissements mais il a créé une interface de service correcte.

Autres conseils

Parfois, vous devez changer votre code. les noms de parties de messages ne doivent pas être les mêmes;)

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

à ceci:

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

@thehhv solution est correcte. Il existe une solution de contournement qui ne nécessite pas l'ajout manuel de xsd .

Accédez à votre service puis, au lieu d'aller ? wsdl , accédez à ? singleWsdl (capture d'écran ci-dessous)

entrer la description de l

puis enregistrez la page en tant que fichier .wsdl (il offrira .svc afin de le changer)

ouvrez ensuite Invite de commande Visual Studio que vous pouvez trouver dans (Windows 7) Démarrer - > Tous les programmes - > Visual studio 2013 - > Outils Visual Studio - > Invite de commandes d'outils natifs VS2013 x64 (pourrait être quelque chose de similaire)
Ensuite, exécutez la commande suivante dans Invite de commande de Visual Studio (où, au lieu de C: \ WebPricingService.wsdl, vous avez enregistré votre fichier wsdl, à moins que vous ne pensiez plus ou moins identique et que vous choisissiez le même nom de fichier. et emplacement inquiétant)

wsdl.exe C:\WebPricingService.wsdl

Cela devrait vous donner des avertissements comme @thehhv dit mais toujours générer le client dans C: \ Programmes (x86) \ Microsoft Visual Studio 12.0 \ VC \ bin \ amd64 \ WebPricingService.cs ( ou partout où il le place sur votre machine - vérifiez la sortie de la console où elle se lit "Écriture de fichier")

entrer la description de l

J'espère que cela vous fera gagner du temps.

Dans mon cas, le problème était différent et il est bien décrit ici :

  

Chaque fois que le nom d'une pièce est " paramètres " .Net suppose que doc / lit / wrapped est utilisé et génère le proxy en conséquence. Si même si le mot "paramètres" est utilisé le wsdl n’est pas doc / lit / wrapped (comme dans le dernier exemple). Net peut nous donner une erreur. Quelle erreur? Vous avez bien deviné: "Ces membres ne peuvent pas être dérivés". Nous pouvons maintenant comprendre ce que l'erreur signifie: .Net essaie d'omettre l'élément racine car il pense que doc / lit / wrapped est utilisé. Cependant, cet élément ne peut pas être supprimé car il n'est pas factice - il doit être activement choisi par l'utilisateur parmi quelques types dérivés.

La solution est la suivante et fonctionne parfaitement pour moi:

  

Pour résoudre ce problème, ouvrez le fichier wsdl dans un éditeur de texte et remplacez le nom de la pièce de "paramètres" par "paramètres1" . Maintenant, .Net saura générer un proxy doc / lit / nu. Cela signifie qu'une nouvelle classe d'encapsuleur apparaîtra en tant que paramètre racine dans le proxy. Bien que cette api puisse être un peu plus fastidieuse, cela n’affectera en rien le format du câble et le proxy est totalement interopérable.

(souligné par moi)

Au cas où quelqu'un heurterait ce mur, voici la cause de l'erreur dans mon cas:

J'ai une opération:

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

qui prend une entrée:

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

et une autre opération:

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

prenant une entrée:

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

Et les éléments en entrée sont des instances de deux types:

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

Voici le problème - le type de génération de rapports: FormatReportAsyncInputType étend le type de génération de rapports: FormatReportInputType . C’est ce qui semble confondre l’outil et provoquer le "Ces membres ne peuvent pas être dérivés". Erreur. Vous pouvez contourner ce problème en suivant la suggestion dans la réponse acceptée.

Si vous faites cela avec UPS Shipping wsdl et que vous souhaitez permuter les URL de prod lorsque vous construisez pour différentes régions (débogage, dev, prod), etc. Utilisez la commande ci-dessous pour générer un vb ou un C #. fichier de Ship.wsdl, puis remplacez les valeurs dans ce cas, le fichier 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top