![]() |
Dateien von einem virtuellen Server holen
Ich habe eine Anwendung, die Daten visualisiert. Dazu werden Dateien ausgelesen, die sich im Moment auf demselben Rechner befinden.
Dies soll geändert werden, damit man den Speicherort der Dateien nicht direkt sieht. Laut meiner IT soll ich ein Programm schreiben, welches dann als Dienst auf einer VM läuft und die Daten dem Hauptrogramm zur Verfügung stellt. Hier nochmals ein wenig detaillierter. Ich habe einen Rechner 1, der die Daten visualisiert, die der Dienst auf dem 2. Rechner bereitstellen könnte. Die Datei, die bereitgestellt wird, ist zwischen 10 und 20 MB groß. Nun müsste wahrscheinlich der Rechner 1 über ein Protokoll (welches?) die Daten beim Rechner 2 (VM) anfragen und der Rechner 2 müsste diese an Rechner 1 übertragen oder irgendwie bereitstellen, damit der Rechner 1 diese abholen kann. Leider habe ich mit Diensten und der Übertragung von Dateien noch nicht gearbeitet. Wie könnte man so etwas programmieren? |
AW: Dateien von einem virtuellen Server holen
Nja, was für Protokolle du nutzt .... da hast'e die Qual der Wahl.
Bei uns läuft es über DataSnap (mit entsprechenden Methoden, z.B. ReadFile, WriteFile usw.), wo die ServerMethoden das als TStream (TFileStream/TMemoryStream) im Result zurückliefern. Ähnlich DataSnap gibt es auch andere Frameworks, wo man "Funktionen" aufrufen kann und sich das Framework um alles kümmert. (z.B. ![]() Oder ein REST-Server, weil ist hipp, cool und machen alle so (z.B. ID rein und Base64-kodiert im JSON die Datei zurück) Hatte ich jetzt bei uns im DataSnap nachgerüstet, also zusätzlich REST als Protokoll für den Funktionsaufruf, damit auch unsere WebAnwendung auf Dateien zugreifen kann, aber da geht auch jede andere REST-Implementation. (bei uns einfach auf's DataSnap drauf, um im Server das nur einmal implementiert zu haben, aber mit zwei Schnittstellen nach außen) Oder ein richtiges FileProtokol, wie FTP (TIdFTPServer), WebDAV oder Dergleichen. Das kann im Server auch "virtuell" sein und muß nicht direkt auf ein Verzeichnis gehn. Im "Pfad" steht dann quasi die ID/Dateiname/Sonstwas, um die entsprechende Datei/Daten von irgendwo zu holen. Auch ein HTTP-Server (TIdHTTPServer) wäre möglich, ähnlich dem FTP. (Pfad -> Datei) Oder ganz billig TCP/IP (TIdTCPServer), aber hier ist alles "ein" Stream und du mußt dich dann selber um alles kümmern (Authentifizierung, Behandlung der Daten im IN/OUT-Stream, also ID/Pfad übergeben und Dateihinhalt zurück, usw.), also deine Daten entsprechend zu kodieren und drüben wieder einzulesen und womöglich während einer Anfrage mehrer Dateien übertragen. (man könnte aber auch nach jeder Übertragung die Verbindung trennen) Oder ... Aber wenn man ein "ordentliches" Framework genutzt wird, dann nimmt es dir erstmal viel Arbeit ab, und du hast später auch die Möglichkeit das für andere/weitere Dinge zu nutzen, und nicht nur für Dateien. Ob Rechner/Server, VM, Docker oder sonstwo, ist egal. Dein Server wird einfach nur mit der entsprechenden IP oder "ComputerNamen" angesprochen. |
AW: Dateien von einem virtuellen Server holen
Ich bringe mal, wie himitsu, das Open Source Framework mORMot ins Spiel. mORMot ist von D7 bis 10.4 verfügbar. Den Download findest du
![]() ![]() mORMot musst du nicht installierten. Es reicht aus, die entsprechenden Bibliothekspfade einzufügen. Die eigentliche Arbeit ist mit mORMot oft schnell erledigt, das Problem dürfte sein, dich in mORMot einzuarbeiten. Es steht eine ausführliche ![]() ![]() Bei einer neuen Anwendung würde ich mORMot2 empfehlen. Dazu gibt es zur Zeit noch keine Hilfe und auch keine Beispiele. Trotzdem hier der Link zum ![]() Bis bald... Thomas |
AW: Dateien von einem virtuellen Server holen
Zitat:
Ich habe mir einmal einige Beispiele vom HTTPServer (Indy) angeschaut und ein wenig abgewandelt. Erste Tests sind erfolgreich, nur soll ich seitens IT Vorgabe anstelle HTTP dann doch HTTPS nutzen. Das werde ich bestimmt auch noch hinbekommen. |
AW: Dateien von einem virtuellen Server holen
HTTP(S) wäre wohl naheliegend, Millionen Webserver arbeiten so für die Browser / Clients.
Das könnte man auch per Scripting automatisieren / lokal cachen, so dass am Programm vielleicht nur minimal geändert werden muss. Am wichtigsten scheint mir hier die Frage, ob es ein LAN Betrieb ist oder WAN. Und dementsprechend müsste man für eine Authentifizierung des Client sorgen / verhindern, dass jemand die Quelladressen belauscht bzw. einfach so abgreifen kann. Darum scheint es ja zu gehen. HTTPS wäre wahrscheinlich ein Fall für letsEncrypt, wobei das im LAN nicht geht. Oder der Server muss für Einrichtung und Refresh dann von Außen erreichbar sein. |
AW: Dateien von einem virtuellen Server holen
Zitat:
Wegen der Authentifizierung habe ich aber noch keine Erfahrungen. Ich müsste doch im Client irgendwo ein Zertifikat ablegen oder? Zitat:
|
AW: Dateien von einem virtuellen Server holen
Zitat:
Die HTTPS Geschichte kannst Du einfach Deiner IT überlassen, Dich interessieren nur URL, worüber die Dateien abgerufen werden. Wenn es HTTPS sein soll, dann muss die IT das regeln. Dein Server Programm stellt ja erstmal nur über HTTP die Dateien bereit. Je nach Konfiguration liefert der Webserver per HTTP oder HTTPS oder beidem aus. |
AW: Dateien von einem virtuellen Server holen
TIdHTTPServer ist selbst der Webserver.
Aber ja, man kann auch über einen anderen Webserver HTTP/HTTPS laufen lassen und es serverintern ans HTTP des Delphi-Webserver durchreichen. Selbst noch nicht gemacht, aber ich denke mal HTTPS würde so gehn: > TIdHTTPServer.IOHandler und dort z.B. einen TIdServerIOHandlerSSLOpenSSL dran Und falls auch ein Delphi-Client existiert, dann TIdHTTP vermutlich mit TIdSSLIOHandlerSocketOpenSSL. (wie es beim neuen TNetHTTPClient geht, noch weniger Ahnung) Authentication: ![]() * schau mal was TIdHTTPServer.OnParseAuthentication macht * aber spätestens in TIdHTTPServer.OnCommandGet kannst in ARequestInfo nochmal den Username+Passwort der aktuellen Anfrage auslesen/prüfen * bei TIdHTTP siehe OnAuthorization und OnSelectAuthorization (z.B. mit TIdBasicAuthentication) Schade, dass es nicht sowas wie bei den REST-Komponenten gibt: also TSimpleAuthenticator/THTTPBasicAuthenticator/TOAuth1Authenticator/TOAuth2Authenticator, welche man anhängen kann. |
AW: Dateien von einem virtuellen Server holen
Ich habe jetzt von unserer IT folgendes bekommen:
xxxxx.cer – Das ist das Webserverzertifikat als solches Issuca.cer - Das ist das Zertifikate der immediate-CA Rootca.cer - Das ist das Zertifikat der Root-CA xx.key - Das ist der private Key Reichen diese Dateien für HTTPS aus? Kommen die alle in die Routinen vom HTTPServer? Man sagte dass ich auch den Zertifikatsspeicher von Windows auslesen könne. Da habe ich aber noch gar keine Beispiele gefunden. |
AW: Dateien von einem virtuellen Server holen
Zitat:
Genutzt habe ich dann IdHTTPServer1 und dann im IOHandler dann IdServerIOHandlerSSLOpenSSL1 gesetzt. Dann soll ich noch die beiden DLL von Indy ins Programmverzeichnis kopieren. Soweit verstehe ich das. Was aber mit den o.g. Dateien? SSLOption.KeyFile -> xx.key SSLOption.RootCertFile -> Rootca.cer SSLOption.CertFile -> Issuca.cer oder xxxxx.cer ??? Wenn ich das xxxxx.cer anklicke, sehe ich oberhalb dann das Issuca.cer und dann ganz oben das Rootca.cer. Damit habe ich 3 Zertifikate, aber nur 2 Einträge in den SSLOptions. Benötige ich alle 3 Zertifikate oder nur 2? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz