AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Dateien von einem virtuellen Server holen

Dateien von einem virtuellen Server holen

Ein Thema von zeras · begonnen am 5. Mai 2021 · letzter Beitrag vom 13. Jun 2021
Antwort Antwort
Seite 1 von 2  1 2   
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#1

Dateien von einem virtuellen Server holen

  Alt 5. Mai 2021, 17:08
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?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.097 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dateien von einem virtuellen Server holen

  Alt 5. Mai 2021, 17:28
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. Hier im Forum suchenmORMot wird hier immer beworben)

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Mai 2021 um 19:17 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
458 Beiträge
 
#3

AW: Dateien von einem virtuellen Server holen

  Alt 5. Mai 2021, 18:01
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 hier. Beispiele findest du hier.

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 Hilfe, viele Beispiele und ein freundliches Forum zur Verfügung.

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 GitHub Repro.

Bis bald...
Thomas

Geändert von mytbo ( 5. Mai 2021 um 18:07 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#4

AW: Dateien von einem virtuellen Server holen

  Alt 18. Mai 2021, 17:03
Auch ein HTTP-Server (TIdHTTPServer) wäre möglich, ähnlich dem FTP. (Pfad -> Datei)
Danke für die Hinweise.

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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Dateien von einem virtuellen Server holen

  Alt 18. Mai 2021, 19:00
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.
Gruß, Jo
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#6

AW: Dateien von einem virtuellen Server holen

  Alt 18. Mai 2021, 19:15
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.
Derzeit soll es bei uns im Intranet laufen. Ob der Bedarf kommt, diese Daten auch von außerhalb downloaden zu können, steht noch nicht fest.

Wegen der Authentifizierung habe ich aber noch keine Erfahrungen. Ich müsste doch im Client irgendwo ein Zertifikat ablegen oder?


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.
In der Firma müssten ja höchstwahrscheinlich Zertifikate existieren. Vielleicht kann ich diese nehmen.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Dateien von einem virtuellen Server holen

  Alt 18. Mai 2021, 22:25

Wegen der Authentifizierung habe ich aber noch keine Erfahrungen. Ich müsste doch im Client irgendwo ein Zertifikat ablegen oder?

In der Firma müssten ja höchstwahrscheinlich Zertifikate existieren. Vielleicht kann ich diese nehmen.
Eine Authentifizierung hat nichts mit Zertifkaten zu tun. Du musst einen solchen Mechanismus intern in der Anwendung bauen, wie er auf vielen Webseiten interaktiv verwendet wird, z.B. hier in DP, Benutzeranmeldung. Da das System ja die Datenquelle verschleiern soll, würde man aber kaum eine interaktive Benutzeranmeldung verwenden. Dafür gibt es bestimmt Komponenten in Delphi.
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.097 Beiträge
 
Delphi 12 Athens
 
#8

AW: Dateien von einem virtuellen Server holen

  Alt 18. Mai 2021, 22:40
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:
https://de.wikipedia.org/wiki/HTTP-Authentifizierung

* 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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (18. Mai 2021 um 22:56 Uhr)
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#9

AW: Dateien von einem virtuellen Server holen

  Alt 21. Mai 2021, 12:55
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#10

AW: Dateien von einem virtuellen Server holen

  Alt 24. Mai 2021, 19:28
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.
Ich habe nun ein wenig weiter geforscht. HTTP geht, ich muss aber HTTPS nutzen.
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?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz