<< Click to Display Table of Contents >> Navigation: HTTP-Server > HTTP-Endpoints verwalten |
Die HTTP-Endpoints werden in der Management Console unter Webinterface (individuell) 🡪 HTTP-Endpoints verwaltet.
HTTP-Endpoint wird in C# programmiert und "on-fly" in eine DLL kompiliert (nicht auf der Festplatte gespeichert), die eine einzige Instanz einer Klasse enthält. In der Management Console können folgende Teile der Klassen-Definition definiert werden:
a)Entry-Point-Funktion (__main) .
Diese Funktion ist ein Entry-Point für die Webseite (als ob die erste Zeile in PHP, ASP etc. wäre), die wir abfangen und implementieren möchten. Der Kontext steht für folgende drei Objekte zur Verfügung:
Request: enthält die Request-Informationen
Response: hier wird die „Antwort“ geschrieben
db: Verbindung zu der Datenbank
cmdb: Verbindung zum roS-Engine
Die Ähnlichkeit mit Microsoft ASP (Active Server Pages) ist beabsichtigt.
b)constructor
Ein Klassenconstructor (1 pro Modul)
c)destructor
Ein Klassendestructor (1 pro Modul)
d)interne Definitionen
wie zum Beispiel gemeinsame Variablen, Hilfs-Klassen, etc.
e)Funktionen der Klasse
Diese Funktionen können lediglich von der Klasse ausgeführt werden.
Objekt "Request"
Dieses Objekt enthält die Abfrage und ist vom Typ rimacon.cmdb.CUSTHTTPRESP.IRequest
Objekt "Response"
Dieses Objekt ermöglicht es, die Antwort zu erstellen und ist vom Typ rimacon.cmdb.CUSTHTTPRESP.IResponse
Objekt "db"
Ermöglicht den direkten Zugriff auf die Datenbank und ist vom Typ rimacon.cmdb.scripting.IDBConnection
Beispiel für XML-RPC
Aktuell werden keine konkreten Protokolle unterstützt, daher muss ggf. selbst programmiert werden.
In diesem Beispiel wird gezeigt, wie der Vorname eines Mitarbeiters über die ID per XML-RPC angefordert werden kann.
Datenbank:
Tabelle: ANW
ID-Spalte: ANW_ID
Vorname: ANW_Name1
HTTP-Servereinstellungen:
Adresse: localhost
Port: 2005
HTTP-Endpoint (Serverseite)
Pfad: /test_xmlrpc
Referenzen: System.XML.dll
Usings: System und System.Xml
<entry point>
XmlDocument doc = new XmlDocument(); doc.Load( new System.IO.StringReader(Request.Content) ); XmlNodeList mn=doc.SelectNodes("/methodCall/methodName"); if (mn.Count!=1) return; // error 🡪 todo <fault>... if (mn.Item(0).InnerText!="getMAVorname") return; // error 🡪 todo <fault>... XmlNodeList prm=doc.SelectNodes("/methodCall/params/param/value/i4"); if (prm.Count!=1) return; // error 🡪 todo <fault>... Response.ContentType="text/xml"; // wichtig !!! string errmsg=""; int id=0; try {id=int.Parse( prm.Item(0).InnerText ); } catch (Exception) { } string vorname=db.ExecuteInto1Var("select ANW_Name1 from ANW where ANW_ID=" + id, "", out errmsg);
Response.ContentType="text/xml"; Response.Write( "<?xml version=\"1.0\" ?>\r\n" + "<methodResponse>\r\n" + " <params>\r\n" + " <param>\r\n" + " <value><string>" + vorname + "</string></value>\r\n" + " </param>\r\n" + " </params>\r\n" + "</methodResponse>" );
|
Client-seitig (in Visual Basic)
Formularobjekte:
▪CommandButton btStart
▪Winsock winsock1: Protocol=0
▪TextBox txResponse :Multiline=true
Option Explicit
Private Sub Form_Load() winsock1.Connect "localhost", 2005 End Sub
Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyEscape Then Unload Me End Sub
Private Sub btStart_Click() Dim xml As String xml = _ "<?xml version=""1.0"" encoding=""utf-8"" ?>" & _ "<methodCall>" & _ " <methodName>getMAVorname</methodName>" & _ " <params>" & _ " <param>" & _ " <value><i4>1</i4></value>" & _ " </param>" & _ " </params>" & _ "</methodCall>"
Dim s As String s = _ "POST /test_xmlrpc HTTP/1.0" & vbCrLf & _ "User-Agent: Example Client" & vbCrLf & _ "Host: localhost" & vbCrLf & _ "Content-Type: text/plain" & vbCrLf & _ "Content-Length: " & Len(xml) & vbCrLf & _ vbCrLf & _ xml
txResponse = "" winsock1.SendData s End Sub
Private Sub winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean) MsgBox Description, vbInformation, "error" End Sub
Private Sub winsock1_DataArrival(ByVal bytesTotal As Long) Dim d As String winsock1.GetData d txResponse = txResponse & d End Sub
|
Wenn Sie das Script ausführen und den Start-Button anklicken, erscheint in der Textbox folgende Antwort:
HTTP/1.1 200 OK Date: Wed, 22 Apr 2009 10:24:03 GMT Server: rimacon CMDB-Core HTTP-Server/1.0 Connection: Keep-Alive Content-Type: text/xml Content-Encoding: utf-8 Content-Length: 156
<?xml version="1.0" ?> <methodResponse> <params> <param> <value><string>admin</string></value> </param> </params> </methodResponse>
|
Standard-ID 1 ist „admin admin“.