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.
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";
}
}
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" %>
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) .
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.
Cela peut être très tard dans la réponse. Mais pourrait être utile aux nécessiteux: Comment convertir WSDL en SVC:
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é.
étape 1
open -> Visual Studio 2017 Developer Command Prompt
étape 2
WSDL.exe /OUT:myFile.cs WSDLURL /Language:CS /serverInterface
é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