Bezüglich des Problems, wenn der in C# geschriebene Webdienst unter Delphi aufgerufen wird
Zunächst halte ich es für notwendig, die Entwicklung von Webservices unter der .net-Plattform relativ umfassend zu erläutern. Die erste Generation von Webservices erschien im E-Commerce-Umfeld. Einige Probleme sind mit herkömmlichen Mitteln nicht mehr einfach zu lösen B. in Anwendungen, ist es nicht mehr möglich, binäre Mechanismen wie dcom und corba zu verwenden, z. B. dcom (Distribute Common Objects Model). kann nur unter der Windows-Plattform ausgeführt werden, während Corba (Common Objects Request Broker) Architektur) ist nur ein Produkt der Java-Plattform. Für sie ist es schwierig, eine Datenkommunikation zwischen Anwendungen zu erreichen.
In diesem Zusammenhang sind Webdienste entstanden, wie es die Zeit erfordert. Sie sind eine gute Lösung für die sprach- und plattformübergreifende sowie gute und sichere Durchdringung von Unternehmens-Firewalls. Seine Architektur ist im Allgemeinen in fünf Ebenen unterteilt:
Datenkommunikation über den HTTP-Kanal (Hypertext Transfer Protocol).
XML-Datenausdrucksformular (Extensable Markup Language).
Datenkapselung von Soap (Einfaches Objektzugriffsprotokoll)
Beschreibungssprachenformat von WSDL (Webservices-Beschreibungssprache)
Uddi (universelle Beschreibung und Entdeckungsintegration) einheitliche Beschreibung, Entdeckung und Integration
Die Fähigkeit, sprach- und plattformübergreifend zu sein und Unternehmens-Firewalls gut und sicher zu durchdringen, reicht aus, um uns zu begeistern. Es gibt jedoch auch Bereiche, die verbessert werden müssen, wie zum Beispiel:
Die HTTP-Datenkommunikation ist langsam, insbesondere die erste Verbindung.
Erfordert den zusätzlichen Overhead eines Webservers
Nachdem wir über die Architektur von Webservices und ihre Vor- und Nachteile gesprochen haben, kommen wir zum Punkt, der dieses Mal das Thema unserer Diskussion ist:
Probleme beim Aufruf des Webservice-Dienstes unter Delphi
Lassen Sie uns das ohne weitere Umschweife anhand eines einfachen Beispiels für das Testen des Attributs „webmethod“ veranschaulichen: Es handelt sich um einen einfachen Geschäftsprozess, bei dem eine Übertragung von Kunde a zu Kunde b abgeschlossen wird.
Zuerst erstellen wir einen Webservice unter .net Framework 1.1. Zu diesem Zeitpunkt erstellt .net automatisch eine Webanwendung für uns.
Wir müssen eine Klasse attributetest erstellen, die sich unter dem Namespace attributetesting befindet. Dann erbt diese Klasse automatisch ihre Basisklasse system.web.services.webservice. Bei Bedarf können wir die Webanwendungsklasse festlegen. Ihr Webserviceattribut enthält die grundlegenden Attribute und Namensraum
[webserviceattribute(namespace=http://www.isdoo.com/services,
Beschreibung = Hallo Ansel, dies ist ein Test-Webdienst!)]
Attributtest der öffentlichen Klasse: system.web.services.webservice
{
[webmethodattribute(description=Beschreibungsinformationen: Erbt die Zählmethode und überlädt den Namen. Die Ausführung besteht darin, Geld von Benutzer a an Benutzer b zu überweisen ...,
//messagename=Nachrichtenname ändern,
bufferresponse=true,
Cachedauer=1000,
enablesession=true,
transactionoption=transactionoption.requiresnew)]
öffentliches String-Transmoney (doppeltes Geld)
{
versuchen
{
contextutil.enablecommit();//Transaktion wird nur für den Datenbankbetrieb verwendet!
geldintoa(Geld);
Moneyoutfromb(Geld);
contextutil.setcomplete();
Rückgabetransaktion erfolgreich, insgesamt +money.tostring();
}
Fang (Ausnahme e)
{
contextutil.setabort();
Rückgabetransaktion fehlgeschlagen! /n/r +e.message;
}
}
privates ungültiges Geld in ein (doppeltes Geld)
{
sqlcommand sqlcom = new sqlcommand(update budget set money=money++money.tostring()+ where name='a');
Datenbankzugriff mydatabase = neuer Datenbankzugriff();
sqlcom.connection=mydatabase.getconnection();
sqlcom.connection.open();
sqlcom.executenonquery();
sqlcom.connection.close();
// neue Ausnahme auslösen (Vorgang ist fehlgeschlagen, wenn Geld in a überwiesen wird!);
}
privates ungültiges Geld aus B (doppeltes Geld)
{
sqlcommand sqlcom = new sqlcommand(update budget set money=money-+money.tostring()+ where name='b');
Datenbankzugriff mydatabase = neuer Datenbankzugriff();
sqlcom.connection=mydatabase.getconnection();
sqlcom.connection.open();
sqlcom.executenonquery();
sqlcom.connection.close();
// neue Ausnahme auslösen (Vorgang fehlgeschlagen, wenn Geld von b überwiesen wird!);
}
}
Worauf wir besonders achten müssen, ist webmethodattribute, das auch der Schwerpunkt dessen ist, worüber wir dieses Mal sprechen müssen. Solange Sie einer Methode [webmethodattribute] hinzufügen, gilt dies auch dann, wenn darin keine Attribute vorhanden sind stellt diese Methode dem Client-Segmentaufrufer zur Verfügung. Lassen Sie uns unten über die sechs Attribute sprechen, darunter zwei beschreibende Informationsattribute und vier Funktionsattribute.
Beschreibende Informationsattribute:
Beschreibung
Nachrichtenname
4 funktionale Eigenschaften:
Pufferantwort
Cachedauer
Aktivierungssitzung
Transaktionsoption
Unter anderem müssen wir auf das Attribut „messagename“ achten. Wenn Delphi den unter der .net-Plattform entwickelten Webservice aufruft und Sie das Attribut „messagename“ festlegen, wird beim Aufruf durch den Client ein Fehler gemeldet. Dies könnte ein Fehler sein, vielleicht wird eine spätere Version dieses Problem lösen. Die spezifischen Funktionen dieser Attribute werden hier nicht im Detail beschrieben. Sie können relevante Bücher lesen.
Im Folgenden werde ich die Schritte auflisten, mit denen Delphi den Webservice aufruft:
Wenn Sie nur den Client entwickeln und aufrufen, müssen Sie zunächst nur eine normale Anwendung erstellen. Anschließend müssen Sie das Steuerelement „soaphttpclient“ in der Symbolleiste „Webservices“ finden und es dann in den Fensterkörper Ihrer Clientanwendung einfügen ;
Zweitens müssen Sie die Attribut-URL oder WSDL dieses Soaphttpclient festlegen. Dieser Inhalt ist die Dienstadresse Ihres Webservices.
Die Dienstadresse unseres aktuellen Beispiels lautet beispielsweise: http://localhost/attributetesting/attributetesting.asmx
Wenn Sie wsdl eingeben möchten, lautet es http://localhost/attributetesting/attributetesting.asmx?wsdl
Damit sind die Steuerungseinstellungen abgeschlossen;
Dann müssen wir die serverseitige WSDL importieren. Sie können dies manuell tun oder die von Delphi bereitgestellte Webservices-Importfunktion verwenden.
Abschließend müssen Sie nur noch die importierte WSDL-Schnittstelle aufrufen. Unser entsprechender Code hier ist:
procedure tform1.bitbtn1click(sender: tobject);
var
aa:attributetestsoap;//Dies ist das Klassenschnittstellenobjekt unter wsdl
msg:widestring;
bb:double;
beginnen
//httprio2 ist eigentlich die sogenannte Proxy-Klasse, die für die Datenübertragung, das Senden von Anfragen und das Empfangen von Antworten verantwortlich ist.
aa:=httprio2 als Attributtestsoap;
bb:=100,00;
msg:=aa.transmoney(bb);//Dies ist die Webdienstmethode webmethod, die uns durch Aufrufen des Webdienstes zugänglich gemacht wird
showmessage(msg);
Ende;
ok! das ist alles!
Beliebte Downloads von kommerziellem Quellcode www.html.org.cn