Serverschnittstellen aufrufen

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Client-Anwendung erstellen

Anwendungen müssen das Interface (die Schnittstelle) IAppServer oder IAppServerSOAP nicht direkt aufrufen, da die entsprechenden Aufrufe automatisch durchgeführt werden, wenn Sie die Eigenschaften und Methoden der Client-Datenmenge verwenden. Während es also nicht notwendig ist, direkt mit IAppServer oder IAppServerSOAP zu arbeiten, sind unter Umständen aber Erweiterungen des Interface des Remote-Datenmoduls erforderlich. Wenn Sie das Interface des Anwendungs-Servers erweitern, benötigen Sie eine Möglichkeit zum Aufrufen der Erweiterungen über die Verbindung, die von der Verbindungskomponente erstellt wird. Sofern Sie nicht mit SOAP arbeiten, ist dies mit der Eigenschaft AppServer der Verbindungskomponente möglich. AppServer ist ein Variant-Wert, der das Interface des Anwendungsservers repräsentiert.

Sie müssen ein Dispatch-Interface von dieser Variante abrufen, um das Interface aufzurufen. Das Dispatch-Interface hat denselben Namen wie das Interface, das beim Erstellen des Remote-Datenmoduls erstellt wurde, jedoch mit dem angehängten String "Disp".

Wenn Ihr Remote-Datenmodul den Namen MyAppServer hat, können Sie daher mit AppServer dieses Interface in C++ wie folgt aufrufen:

IDispatch* disp = (IDispatch*)(MyConnection->AppServer)
IMyAppServerDisp tempInterface( (IMyAppServer*)disp);
TempInterface.SpecialMethod(x,y);

Hinweis: Das Dispatch-Interface wird in der Datei _TLB.h vom Typbibliothekseditor erzeugt.

Wenn Sie SOAP nicht verwenden, können Sie Interface-Methoden mithilfe von AppServer aufrufen, indem Sie Anweisungen in Delphi wie die folgende schreiben:

MyConnection.AppServer.SpecialMethod(x,y);

Diese Technik arbeitet jedoch mit später (dynamischer) Bindung im Interface-Aufruf. Der Aufruf der Prozedur SpecialMethod wird also erst gebunden, wenn der Aufruf zur Laufzeit ausgeführt wird. Die späte Bindung ist sehr flexibel, nützliche Funktionen wie Code Insight und die Typprüfung können jedoch nicht genutzt werden. Zudem arbeitet die späte Bindung langsamer als die frühe Bindung, da der Compiler zusätzliche Aufrufe an den Server generiert, um Einrichtungsoperationen für Interface-Aufrufe vor deren Verarbeitung durchzuführen.

Frühe Bindung mit DCOM

Wenn Sie DCOM als Kommunikationsprotokoll mit Delphi einsetzen, können Sie die frühe Bindung für AppServer-Aufrufe nutzen. Verwenden Sie den Operator as, um die AppServer-Variable in den IAppServer-Nachkommen umzuwandeln, den Sie zusammen mit dem Remote-Datenmodul erstellt haben. Zum Beispiel:

with MyConnection.AppServer as IMyAppServer do
SpecialMethod(x,y);

Um die frühe Bindung unter DCOM zu nutzen, muss die Typbibliothek des Servers auf dem Client-Computer registriert werden. Sie können das zum Lieferumfang von RAD Studio gehörende Programm TRegSvr.exe verwenden, um die Typbibliothek zu registrieren.

Hinweis: Das Beispiel TRegSvr enthält den Quellcode für TRegSvr.exe und zeigt die programmseitige Registrierung der Typbibliothek. Das TRegSvr-Beispiel finden Sie im Verzeichnis Object Pascal\VCL\TRegSvr (klicken Sie auf Start | Programme | Embarcadero RAD Studio 10.2 Tokyo | Beispiele).

Dispatch-Interfaces über TCP/IP oder HTTP aufrufen

Wenn Sie TCP/IP oder HTTP verwenden, können Sie die frühe Bindung nicht nutzen, da das Remote-Datenmodul ein duales Interface besitzt. Sie können jedoch das Dispatch-Interface des Anwendungsservers einsetzen, um eine bessere Leistung als bei der normalen späten Bindung zu erreichen. Der Name des Dispatch-Interface entspricht dem Namen des Interface des Remote-Datenmoduls, an den zusätzlich der String "Disp" angehängt wird. Sie können die Eigenschaft AppServer einer Variable dieses Typs zuweisen, um auf das Dispatch-Interface zuzugreifen. Dazu ein Beispiel in Delphi:

var
TempInterface: IMyAppServerDisp;
begin
  TempInterface :=IMyAppServerDisp(IDispatch(MyConnection.AppServer));
  // …
 TempInterface.SpecialMethod(x,y);
 // …
end;

Hinweis: Um das Dispatch-Interface nutzen zu können, müssen Sie die beim Speichern der Typbibliothek generierte Unit _TLB in die uses-Klausel des Client-Moduls einfügen.

Interface eines SOAP-basierten Servers aufrufen

Wenn Sie mit SOAP arbeiten, können Sie die Eigenschaft AppServer nicht verwenden. Stattdessen müssen Sie ein Remote-Interface-Objekt (THTTPRio) und Aufrufe mit früher Bindung verwenden. Bei allen Aufrufen mit früher Bindung muss der Client-Anwendung beim Compilieren die Interface-Deklaration des Anwendungsservers bekannt sein.

Sie können diese Ihrer Client-Anwendung hinzufügen, indem Sie auf ein WSDL-Dokument verweisen, das das aufzurufende Interface beschreibt. Bei SOAP-Servern ist dieses Interface vollkommen getrennt von dem Interface des SOAP-Datenmoduls. Informationen zum Import eines WSDL-Dokuments, das das Interface beschreibt, finden Sie unter WSDL-Dokumente importieren.

In der Unit, in der das Server-Interface deklariert ist, muss das Server-Interface auch in der Aufrufregistrierung registriert werden. Einzelheiten zum Registrieren von aufrufbaren Interfaces finden Sie unter Aufrufbare Interfaces im Überblick. Erstellen Sie nach dem Import in C++ eines WSDL-Dokuments zum Erzeugen einer Unit für die Deklaration und Registrierung des Interface eine Instanz von THTTPRio für das gewünschte Interface:

THTTPRio *X = new THTTPRio(NULL);

Als Nächstes weisen Sie dem URL, den Ihre Verbindungskomponente verwendet, dem Interface-Objekt zu, indem Sie den Namen des aufzurufenden Interface anhängen:

 X->URL = SoapConnection1.URL + "IMyInterface";

Jetzt können Sie mit der Methode QueryInterface ein Interface zum Aufrufen der Servermethoden abrufen:

InterfaceVariable = X->QueryInterface(IMyInterfaceIntf);
if (InterfaceVariable)
{
InterfaceVariable->SpecialMethod(a,b);
}

Beachten Sie, dass der Aufruf von QueryInterface den DelphiInterface-Wrapper für das aufrufbare Interface und nicht das aufrufbare Interface selbst als Argument übernimmt.

Wenn Sie mit SOAP arbeiten, können Sie die Eigenschaft AppServer nicht verwenden. Stattdessen müssen Sie das Interface des Servers durch einen Aufruf der Methode GetSOAPServer ermitteln. Bevor Sie jedoch GetSOAPServer aufrufen, müssen Sie zuerst die folgenden Schritte durchführen:

  • Ihre Client-Anwendung muss über die Definition des Interface des Anwendungsservers verfügen und diese in der Aufruf-Registrierung eintragen. Sie können die Definition des Interface Ihrer Client-Anwendung hinzufügen, indem Sie auf ein WSDL-Dokument verweisen, das das aufzurufende Interface beschreibt. Informationen zum Import eines WSDL-Dokuments, das das Server-Interface beschreibt, finden Sie unter Aufrufbare Interfaces im Überblick.
  • Die Komponente TSOAPConnection muss ihre aufrufbaren Interfaces kennen.
  • Sie müssen die Eigenschaft SOAPServerIID der SOAP-Verbindungskomponente auf die GUID des Server-Interface setzen. Diese Zuweisung muss erfolgen, bevor Ihre Anwendung eine Verbindung mit dem Server herstellt, da anhand dieser Eigenschaft der TSOAPConnection-Komponente mitgeteilt wird, welches Interface sie vom Server anfordern soll.

Unter der Voraussetzung, dass die zuvor genannten drei Bedingungen erfüllt sind, können Sie das Server-Interface in Delphi wie folgt abrufen:

with MyConnection.GetSOAPServer as IMyAppServer do
SpecialMethod(x,y);

Siehe auch