Concernant le problème lorsque le service web écrit en C# est appelé sous Delphi
Tout d'abord, je pense qu'il est nécessaire de donner une explication relativement complète du développement des webservices sous la plateforme .net. La première génération de webservices est apparue dans l'environnement du commerce électronique. Certains problèmes ne sont plus faciles à résoudre par les moyens traditionnels. , comme dans les applications. Pour la communication commerciale et l'échange de données, il n'est plus possible d'utiliser des mécanismes binaires tels que dcom et corba. Sans compter qu'ils sont limités par leurs plates-formes respectives, par exemple dcom (modèle de distribution d'objets communs). ne peut être effectué que sous la plate-forme Windows, tandis que corba (courtier de requêtes d'objets communs architecture) n'est qu'un produit de la plateforme Java. Il leur est difficile de réaliser la communication de données entre les applications.
Dans ce contexte, les services Web sont apparus comme les temps l'exigent. Il s'agit d'une bonne solution pour une pénétration multilingue, multiplateforme et bonne et sûre des pare-feu d'entreprise. Son architecture est généralement divisée en cinq niveaux :
Communication de données sous canal http (hypertext transfer protocol)
formulaire d'expression de données XML (langage de balisage extensible)
Encapsulation des données de Soap (protocole d'accès aux objets simples)
Format du langage de description de wsdl (langage de description des services Web)
uddi (description universelle et intégration de découverte) description, découverte et intégration unifiées
Être multilingue, multiplateforme et efficace et sécurisé pour pénétrer les pare-feu d'entreprise suffit à nous enthousiasmer. Cependant, il existe également des domaines qui nécessitent des améliorations, tels que :
La communication des données HTTP est lente, surtout lors de la première connexion.
Nécessite la surcharge supplémentaire d'un serveur Web
Après avoir parlé de l’architecture des webservices et de ses avantages et inconvénients, rentrons dans le vif du sujet, qui est cette fois le sujet de notre discussion :
Problèmes lorsque le service web service est appelé sous Delphi
Sans plus tarder, illustrons avec un exemple simple de test de l'attribut de la méthode web : il s'agit d'un processus métier simple consistant à effectuer un transfert du client a au client b.
Nous créons d’abord un service Web sous .net framework1.1. À ce stade, .net créera automatiquement une application Web pour nous.
Nous devons créer un attribut de classe test, qui se trouve sous l'attribut d'espace de noms test. Ensuite, cette classe héritera automatiquement de sa classe de base system.web.services.webservice. Si nécessaire, nous pouvons définir la classe d'application Web. Son attribut webservice, les attributs de base incluent la description. et espace de noms
[webserviceattribute(namespace=http://www.isdoo.com/services,
description=bonjour Ansel, ceci est un service Web de test !)]
test d'attribut de classe publique : system.web.services.webservice
{
[webmethodattribute(description=Informations de description : hérite de la méthode count et surcharge le nom. L'exécution consiste à transférer de l'argent de l'utilisateur a à l'utilisateur b...,
//messagename=changement du nom du message,
réponse tampon = vrai,
durée du cache=1000,
activer la session = vrai,
transactionoption=transactionoption.requiresnew)]
transmoney à chaîne publique (double argent)
{
essayer
{
contextutil.enablecommit();//transaction utilisée uniquement pour le fonctionnement de la base de données !
argentdans(argent);
moneyoutfromb(argent);
contextutil.setcomplete();
transaction de retour réussie, total +money.tostring();
}
attraper (exception e)
{
contextutil.setabort();
échec de la transaction de retour ! /n/r +e.message ;
}
}
argent vide privé dans (double argent)
{
sqlcommand sqlcom = new sqlcommand(mettre à jour le budget défini money=money++money.tostring()+ où nom='a');
databaseaccess mabase de données = new databaseaccess();
sqlcom.connection=mabase de données.getconnection();
sqlcom.connection.open();
sqlcom.executenonquery();
sqlcom.connection.close();
//lancer une nouvelle exception (l'opération a échoué lors du transfert d'argent vers un !);
}
argent privé annulé depuisb (double argent)
{
sqlcommand sqlcom = new sqlcommand (mettre à jour le budget défini money=money-+money.tostring()+ où name='b');
databaseaccess mabase de données = new databaseaccess();
sqlcom.connection=mabase de données.getconnection();
sqlcom.connection.open();
sqlcom.executenonquery();
sqlcom.connection.close();
//lance une nouvelle exception (l'opération a échoué lors du transfert d'argent depuis b !);
}
}
Ce à quoi nous devons prêter une attention particulière est l'attribut webmethod, qui est également au centre de ce dont nous devons parler cette fois. Tant que vous ajoutez [webmethodattribute] à une méthode, même s'il n'y a aucun attribut, alors le service Web. exposera cette méthode à l'appelant du segment client. Parlons ci-dessous de ses 6 attributs, dont 2 attributs d'informations descriptives et 4 attributs fonctionnels.
Attributs des informations descriptives :
description
nom du message
4 propriétés fonctionnelles :
réponse tampon
durée du cache
activer la session
option de transaction
Parmi eux, nous devons prêter attention à l'attribut messagename. Lorsque Delphi appelle le webservice développé sous la plateforme .net, si vous définissez l'attribut messagename, une erreur sera signalée lorsque le client l'appellera. Il s'agit peut-être d'un bug, peut-être qu'une version ultérieure résoudra ce problème. Quant aux fonctions spécifiques de ces attributs, elles ne seront pas décrites en détail ici. Vous pouvez lire des livres pertinents.
Ci-dessous, je vais énumérer les étapes permettant à Delphi d'appeler le service Web :
Tout d'abord, si vous développez et appelez simplement le client, il vous suffit de créer une application ordinaire. Ensuite, vous devez rechercher le contrôle soaphttpclient sous les services Web de la barre d'outils, puis le placer dans le corps de la fenêtre de votre application client. ;
Deuxièmement, vous devez définir l'attribut url ou wsdl de ce client soaphttp. Ce contenu est l'adresse de service de votre service Web.
Par exemple, l'adresse de service de notre exemple actuel est : http://localhost/attributetesting/attributetesting.asmx
Si vous souhaitez saisir wsdl, c'est http://localhost/attributetesting/attributetesting.asmx?wsdl
Ceci termine les paramètres de contrôle ;
Ensuite, nous devons importer le wsdl côté serveur. Vous pouvez le faire manuellement ou utiliser la fonction d'importation de services Web fournie par Delphi.
Enfin, il vous suffit d'appeler l'interface wsdl importée. Notre code correspondant ici est :
procédure tform1.bitbtn1click(expéditeur : tobject) ;
var
aa:attributetestsoap;//Ceci est l'objet d'interface de classe sous wsdl
msg:chaîne large;
bb:double;
commencer
//httprio2 est en fait ce qu'on appelle la classe proxy, qui est responsable de la transmission des données, de l'envoi des requêtes et de l'acceptation des réponses.
aa:=httprio2 comme attributtestsoap ;
bb :=100,00 ;
msg:=aa.transmoney(bb);//Il s'agit de la méthode de service Web qui nous est exposée en appelant le service Web
showmessage(msg);
fin;
ok ! c'est tout !
Téléchargements populaires de code source commercial www.html.org.cn