Benutzer-Werkzeuge

Webseiten-Werkzeuge


k27:k27.5:k27.5.2:start

27.5.2 Klasse RpcClient

Ein Objekt der Klasse RpcClient (gb.xml.rpc) können Sie so erzeugen:

Dim hRpcClient As RpcClient 
hRpcClient = New RpcClient(remoteFunction As RpcFunction)  As "EVENT-NAME" 

Beachten Sie, dass Sie alle Eigenschaften einer (neuen) RPC-Funktion festgelegt haben müssen, bevor Sie ein neues RPC-Client-Objekt erzeugen.

27.5.2.1 Eigenschaften

Die Klasse RpcClient verfügt über drei Eigenschaften:

EigenschaftDatentypBeschreibung
ModeIntegerGibt den Modus für den intern verwendeten HTTP-Server an oder setzt diese Eigenschaft. Als Werte für die Eigenschaft Modus können diese drei Konstanten verwendet werden: Const offLine As Integer = 0, Const httpSync As Integer = 1 und Const httpAsync As Integer = 2.
RpcMethodRpcFunctionDiese Eigenschaft kann nur gelesen werden und gibt eine RpcFunktion zurück.
URLStringDer URL besteht aus dem Locator des Servers mit nachfolgender Port-Nummer, auf dem der XML-RPC-Server lauscht. Beispiel → localhost:1088

Tabelle 27.5.2.1.1 : Eigenschaften der Klasse RpcClient

27.5.2.2 Methoden

Die Klasse RpcClient verfügt nur über diese zwei Methoden:

MethodeRückgabetypBeschreibung
Function Call(Data As Variant[])VariantZurückgegeben wird der Funktionswert des Methodenaufrufs. Data ist ein Variant-Array mit den Argumenten, das an den Server übergeben wird.
Function EvalReply(sCad As String)VariantGibt den Datenteil einer XML-RPC-Antwort zurück. Diese Daten können u.a. vom Typ Integer, Float, String, Boolean, Array oder Struct sein.

Tabelle 27.5.2.2.1 : Methoden der Klasse RpcClient

27.5.2.3 Client-Projekt 1

Als Server für das erste Projekt wird ein XML-RPC-Server → Kapitel 27.5.1 RPC-Server gestartet, der seine Dienste auf einem PC lokal auf dem Port 1088 anbietet. Der Port 1088 wurde gewählt, weil er einerseits über den ersten Standard-Ports (>1023) liegt und andererseits offiziell nicht benutzt wird oder reserviert ist. Über die RPC-Schnittstelle können die folgenden vier Funktionen vom Client aufgerufen werden:

  • system.methodHelp – Die Methode 'system.methodHelp' gibt den Hilfetext zurück, sofern ein Hilfe-Text für die spezielle Methode mit RpcServer.Help definiert ist. Ansonsten gibt sie einen leeren String zurück.

Doc

Abbildung 27.5.2.3.1: Dokumentation der Funktion add2integer

  • system.methodSignature – Die Methode 'system.methodSignature' gibt ein Array von bekannten Signaturen (als ein Array von Arrays) für den speziellen Methodennamen zurück. Wenn keine Signaturen bekannt sind, gibt sie ein leeres Array zurück.

Signatur

Abbildung 27.5.2.3.2: Liste der Signatur der Funktion add2integer

  • system.listMethods – Die Methode 'system.listMethods' listet alle Methoden als Elemente in einem Array auf, die für die RPC-Schnittstelle auf dem XML-RPC-Server implementiert sind. Der Aufruf erfolgt ohne Argumente - das Array der Argumente ist leer.

Funktionen

Abbildung 27.5.2.3.3: Liste der implementierten Funktionen

  • add2integer – Diese Methode liefert als Funktionswert die Summe von zwei als Argument übergebene Integer-Zahlen zurück.

Run

Abbildung 27.5.2.3.4: Aufruf der Methode add2integer

Beachten Sie: In beiden Projekten erfolgt für die beiden Summanden keine Prüfung des Datentyps und des Integer-Bereiches.

Der Quelltext für den XML-RPC-Client wird vollständig angegeben:

' Gambas class file
 
Private $sRPCURL As String
Private hXMLRPCFunction As RpcFunction
Private hXMLRPCClient As RpcClient
Private $aArguments As Variant[]
Private $sRPCFunctionName As String
 
Public Sub Form_Open()
  FMain.Resizable = False
  FMain.Title = "HTTP-SERVICE * RPC-CLIENT"
  txbSumme.ReadOnly = True
' $sRPCURL = "0.0.0.0:1088"
' $sRPCURL = "192.168.2.101:1088"
' $sRPCURL = "127.0.0.1:1088"
  $sRPCURL = "localhost:1088" ' This Port officially not used or reserved
  $sRPCFunctionName = "add2integer"
End
 
Public Sub btnGetResult_Click()
  GetResult()
End
 
Public Sub btnGetInformation_Click()
  GetDoc()
  GetSignatures()
  GetMethods()
End
Public Sub txbSummand1_Change()
  txbSumme.Clear() 
End
 
Public Sub txbSummand2_Change()
  txbSumme.Clear() 
End
 
Private Sub GetResult()
 
  Dim iResult As Integer
 
  $aArguments = New Variant[]
  hXMLRPCFunction = New RpcFunction($sRPCFunctionName, [XmlRpc.xInteger, XmlRpc.xInteger], XmlRpc.xInteger)
  hXMLRPCClient = New RpcClient(hXMLRPCFunction) As "hXMLRPCClient"
  hXMLRPCClient.URL = "http://" & $sRPCURL
 
  $aArguments.Add(CInt(txbSummand1.Text))
  $aArguments.Add(CInt(txbSummand2.Text))
 
  Try iResult = hXMLRPCClient.Call($aArguments)
  If Not Error Then 
     txbSumme.Text = Str(iResult)
  Else
     Message.Error(("Error-Text: ") & Error.Text & gb.NewLine &
                   ("Error-Location:  ") & Error.Where & gb.NewLine & 
                   ("URL: '") & $sRPCURL & " '")
  Endif
 
End
 
Private Sub GetDoc()  
 
  Dim sResult As String
 
  $aArguments = New Variant[]
  hXMLRPCFunction = New RpcFunction("system.methodHelp", [XmlRpc.xString], XmlRpc.xString)
  hXMLRPCClient = New RpcClient(hXMLRPCFunction) As "hXMLRPCClient"
  hXMLRPCClient.URL = "http://" & $sRPCURL
 
  $aArguments.Add("add2integer")
 
  Try sResult = hXMLRPCClient.Call($aArguments)
  If Not Error Then 
     Message.Title = ("Description of the function")
     Message.Info(("Function: ") & $sRPCFunctionName & "<hr>" & sResult)
  Else
     Message.Error(("Error-Text: ") & Error.Text)
  Endif
 
End
 
Private Sub GetSignatures()  
 
  Dim aResult As New RpcArray
  Dim sMessage As String
  Dim iIndex As Integer
 
  $aArguments = New Variant[]
  hXMLRPCFunction = New RpcFunction("system.methodSignature", [XmlRpc.xString], XmlRpc.xArray)
  hXMLRPCClient = New RpcClient(hXMLRPCFunction) As "hXMLRPCClient"
  hXMLRPCClient.URL = "http://" & $sRPCURL
 
  $aArguments.Add("add2integer")
 
  Try aResult = hXMLRPCClient.Call($aArguments)
  If Not Error Then 
     Message.Title = ("List of data types")
     sMessage = ("List of data types of the function")
     sMessage &= "<font color='red'>" & $sRPCFunctionName & "</font>"
     sMessage &= "<hr>"
     For iIndex = 1 To aResult.Count
       If iIndex = 1 Then 
          sMessage &= ("Function value ") & " = " & aResult[iIndex - 1] & gb.NewLine
       Else
          If iIndex = aResult.Count Then 
             sMessage &= "Argument " & Str(iIndex - 1) & " = " & aResult[iIndex - 1]
          Else
             sMessage &= "Argument " & Str(iIndex - 1) & " = " & aResult[iIndex - 1] & gb.NewLine
          Endif
       Endif
     Next
     Message.Info(sMessage)
  Else
     Message.Error(("Error-Text: ") & Error.Text)
  Endif  
End
 
Private Sub GetMethods()  
 
  Dim aResult As New RpcArray
  Dim sMessage As String
  Dim iIndex As Integer
 
  $aArguments = New Variant[]
  hXMLRPCFunction = New RpcFunction("system.listMethods", [], XmlRpc.xArray)
  hXMLRPCClient = New RpcClient(hXMLRPCFunction) As "hXMLRPCClient"
  hXMLRPCClient.URL = "http://" & $sRPCURL
 
  Try aResult = hXMLRPCClient.Call($aArguments)
  If Not Error Then 
     Message.Title = ("List of funktions")
     sMessage = ("Functions on the RPC server") & "<hr>"
     For iIndex = 1 To aResult.Count
       sMessage &= aResult[iIndex - 1] & gb.NewLine
     Next
     Message.Info(sMessage)
  Else
     Message.Error(("Error-Text: ") & Error.Text)
  Endif
 
End

27.5.2.4 Client-Projekt 2

Im Gegensatz zum ersten Projekt wird ein XML-RPC-Server nur dann gestartet, wenn die PHP-Datei xmlrpc.server.php im Web-Ordner ~/public_html aufgerufen wird → Kapitel 27.5.1 und 24.13. Der Quelltext für den Client2 unterscheidet sich vom Client1 aus dem Projekt 1 deshalb vor allem in der unterschiedlichen Diktion des URL. Als Funktion ist ebenso wie im ersten Projekt add2integer implementiert.

' Gambas class file
 
Private $sRPCURL As String
 
Public Sub Form_Open()
  FMain.Resizable = False
  FMain.Title = "WEBSERVICE * RPC-CLIENT"
  txbSumme.ReadOnly = True
  $sRPCURL = "localhost/~" & System.User.Name &/ "xmlrpc.server.php"
End
 
Public Sub btnGetResult_Click()
  GetResult()
End
 
Public Sub txbSummand1_Change()
  txbSumme.Clear()
End
 
Public Sub txbSummand2_Change()
  txbSumme.Clear()
End
 
Private Sub GetResult()
 
  Dim hXMLRPCClient As RpcClient  
  Dim hXMLRPCFunction As RpcFunction
  Dim aArguments As New Variant[]
  Dim iResult As Integer
 
  hXMLRPCFunction = New RpcFunction("add2integer", [XmlRpc.xInteger, XmlRpc.xInteger], XmlRpc.xInteger)
 
  hXMLRPCClient = New RpcClient(hXMLRPCFunction) As "hXMLRPCClient"
  hXMLRPCClient.URL = "http://" & $sRPCURL
 
  aArguments.Add(CInt(txbSummand1.Text))
  aArguments.Add(CInt(txbSummand2.Text))
 
  Try iResult = hXMLRPCClient.Call(aArguments)
  If Not Error Then 
     txbSumme.Text = Str(iResult)
  Else
     Message.Error("Fehler-Text:   " & Error.Text & gb.NewLine &
                   "Fehler-Ort:    " & Error.Where & gb.NewLine & 
                   "URL:   '" & $sRPCURL & " '")
  Endif
 
End

Das Ergebnis der algebraischen Addition wird Sie wohl nicht überraschen:

Abbildung 27.5.2.4.1: Aufruf der auf einem RPC-Server (PHP) implementierten Funktion add2integer

Download

Die Website verwendet zwei temporäre Session-Cookies. Diese technisch notwendigen Cookies werden gelöscht, wenn der Web-Browser geschlossen wird! Informationen zu Cookies erhalten Sie in der Datenschutzerklärung.
k27/k27.5/k27.5.2/start.txt · Zuletzt geändert: 02.12.2017 (Externe Bearbeitung)

Seiten-Werkzeuge