HTTP-Endpoints verwalten

<< 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“.