web-dev-qa-db-fra.com

comment générer un service web à partir de wsdl

Le client m'a fourni le wsdl pour générer le service Web, mais lorsque j'ai utilisé la commande wsdl.exe, il en a généré la classe .cs. J'ai consommé cette classe dans mon service Web et lorsque j'ai fourni le wsdl au client, il ne correspondait pas à leur schéma. En fait, je veux que le .asmx soit généré automatiquement à partir du wsdl afin que je puisse remplir la méthode Web. Pour qu'il corresponde exactement à leur schéma. J'espère que cela aura du sens.

39
alice7

Malheureusement, il n'y a pas de solution miracle pour ce que vous recherchez. Voici ce que vous pouvez faire:

  • créez une classe d'interface à l'aide de cette commande dans la fenêtre d'invite de commandes de Visual Studio:

    wsdl.exe yourFile.wsdl /l:CS /serverInterface
    Utilisez VB ou CS pour la langue de votre choix. Cela créera un nouveau .cs ou .vb fichier.

  • Créez un nouveau projet de service Web .NET. Importez un fichier existant dans votre projet - le fichier créé à l'étape ci-dessus.

  • Dans votre .asmx.cs fichier en mode Code, modifiez votre classe en tant que telle:

 public class MyWebService : System.Web.Services.WebService, IMyWsdlInterface
 {    
     [WebMethod]
     public string GetSomeString()
     {
         //you'll have to write your own business logic 
         return "Hello SOAP World";
     }
 }
68
p.campbell

Que diriez-vous d'utiliser le wsdl /server ou wsdl /serverinterface commutateurs? Pour autant que je comprends les propriétés de la ligne de commande wsdl.exe, c'est ce que vous recherchez.

- ADVANCED -

/ serveur

Server switch has been deprecated. Please use /serverInterface instead.
Generate an abstract class for an xml web service implementation using
ASP.NET based on the contracts. The default is to generate client proxy
classes.

D'un autre côté: pourquoi voulez-vous créer des solutions technologiques obsolètes? Pourquoi ne pas créer ce service Web en tant que service WCF. C'est la manière actuelle et plus moderne et beaucoup plus flexible de le faire!

Marc


MISE À JOUR:

Lorsque j'utilise wsdl /server sur un fichier WSDL, je fais créer ce fichier:

[WebService(Namespace="http://.......")]
public abstract partial class OneCrmServiceType : System.Web.Services.WebService 
{
    /// <remarks/>
    [WebMethod]
    public abstract void OrderCreated(......);
}

Il s'agit essentiellement du même code qui est généré lorsque vous ajoutez un fichier ASMX à votre solution (dans le code derrière le fichier - "yourservice.asmx.cs"). Je ne pense pas que vous puissiez vous rapprocher de la création d'un fichier ASMX à partir d'un fichier WSDL.

Vous pouvez toujours ajouter le "yourservice.asmx" manuellement - il ne contient pas vraiment grand chose:

<%@ WebService Language="C#" CodeBehind="YourService.asmx.cs" 
      Class="YourServiceNamespace.YourServiceClass" %>
4
marc_s

Vous ne pouvez pas garantir que le WSDL généré automatiquement correspondra au WSDL à partir duquel vous créez l'interface de service.

Dans votre scénario, vous devez placer le fichier WSDL quelque part sur votre site Web et demander aux consommateurs d'utiliser cette URL. Vous devez désactiver le protocole Documentation dans le web.config afin que "? Wsdl" ne renvoie pas de WSDL. Voir <protocols> Élément .

Notez également le premier paragraphe de cet article:

Cette rubrique est spécifique à une technologie héritée. Les services Web XML et les clients de services Web XML doivent maintenant être créés à l'aide de Windows Communication Foundation (WCF) .

3
John Saunders

Vous pouvez générer les classes proxy WS à l'aide de l'outil WSCF (Web Services Contract First) de thinktecture.com. Donc, essentiellement, VOUS POUVEZ créer des services Web à partir de wsdl. Créer les asmx, peut-être pas, mais c'est le plus simple n'est-ce pas? Cet outil s'intègre brillamment dans VS2005-8 (nouvelle version pour 2010/WCF appelée WSCF-blue). Je l'ai utilisé beaucoup et l'ai toujours trouvé très bon.

1
Neilb

Cela peut être très tard dans la réponse. Mais pourrait être utile aux nécessiteux: Comment convertir WSDL en SVC:

  1. En supposant que vous ayez un fichier .wsdl à l'emplacement "E: \" pour en faciliter l'accès.
  2. Préparez la commande pour chaque fichier .wsdl en tant que: E:\YourServiceFileName.wsdl
  3. Autorisations: en supposant que vous disposez des droits d'administration pour effectuer des autorisations. Répertoire ouvert: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin
  4. Cliquez avec le bouton droit sur AMD64 => Sécurité => Modifier => Ajouter un utilisateur => Tout le monde ou l'utilisateur actuel => Autoriser toutes les autorisations => OK.
  5. Préparez les commandes pour chaque fichier dans l'éditeur de texte en tant que: wsdl.exe E:\YourServiceFileName.wsdl/l: CS/server.
  6. Ouvrez maintenant l'invite de commande de Visual studio à partir de: invite de commande des outils natifs C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts\VS2013 x64.
  7. Exécutez la commande ci-dessus.
  8. Accédez au répertoire: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64, où le fichier .CS respectif doit être généré.

    9. Déplacez le fichier CS généré vers l'emplacement approprié.

1
Red Swan

étape 1

open -> Visual Studio 2017 Developer Command Prompt

étape 2

WSDL.exe  /OUT:myFile.cs WSDLURL  /Language:CS /serverInterface
  • / serverInterface (ceci pour créer une interface à partir du fichier wsdl)
  • WSDL.exe (cette utilisation pour créer une classe à partir de wsdl est fournie avec .net
  • / OUT: (nom du fichier de sortie)

étape 2

créer un nouveau "Projet de service Web"

étape 3

ajouter -> service Web

étape 4

copiez tout le code de monFichier.cs (généré ci-dessus) sauf "en utilisant des classes" par exemple:

 /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.6.1055.0")]
    [System.Web.Services.WebServiceBindingAttribute(Name="calculoterServiceSoap",Namespace="http://tempuri.org/")]

public interface ICalculoterServiceSoap {

    /// <remarks/>
    [System.Web.Services.WebMethodAttribute()]
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/addition", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    string addition(int firtNo, int secNo);
}

étape 4

le coller dans votre webService.asmx.cs (à l'intérieur de namespace) créer ci-dessus à l'étape-2

étape-5

héritez de la classe d'interface avec votre classe de service Web, par exemple:

public class WebService2 : ICalculoterServiceSoap
0
abdul rehman kk