C# Große Updates als Zip herunter laden

xlShortylx

Cadet 4th Year
Registriert
Sep. 2012
Beiträge
103
Hallo,

ich habe das vorhandene Projekt übertragen bekommen und nun kommt der ein oder andere Fehler auf.
Der Sinn dieses Projekts ist es, Updates als Zip-Dateien herunter zu laden, entpacken und zu installieren.
Der Client (Windows Service) frägt regelmäßig einen Wcf-Dienst an, ob es Updates gibt. Zwischen dem Client und dem Wcf-Dienst können aber weitere Wcf-Dienste existieren, ist bei diesem Problem aber nicht relevant.

Nun zu meinem Problem:
Es müssen die Updates natürlich von vielen Clients heruntergeladen werden können.
Updates können aber auch ein paar Gigabyte groß sein.

Bisher wird auf dem Server die Zip-Datei eingelesen und in Byte-Arrays an den Client übertragen....
Natürlich steckt auch eine gewisse Logik dahinter, jedoch wurde nicht beachtet, dass große Dateien übertragen werden sollen und dass auch hunderte Clients anfragen können. D.h. der Downloadprozess muss meiner Meinung nach komplett abgeändert werden.

Ich kenne mich mit dieser Thematik noch nicht wirklich aus und wollte jetzt nachfragen, ob mir jemand helfen kann.
Kann man die Dateien per Ftp übertragen? Oder was wäre sinnvoll?

Wäre um jede Antwort dankbar.
Gruß, Marco
 
Hi,

"klassisch" würde ich irgendeine Form von gesicherter Verbindung in Kombination mit einer anschließenden Prüfsumme benutzen. Die ZIP Datei kann ja im Grunde egal von woher geladen werden, sofern die Prüfung mittels Prüfsumme erfolgreich war kann man die ZIP nutzen. Der Server muss dann in dem Fall nur noch die Prüfsummenberechnung machen.

So könnte man das z.B. angehen, gibt aber natürlich noch etliche andere Wege.

VG,
Mad
 
Hi, danke für die Antwort.
Die Hashsumme wird schon überprüft, wird evtl. auch noch abgeändert.
Hier geht es eher um die Übertragung, wie diese genau gemacht werden sollte.
Ich wurde in den kalten Brunnen geworfen und bin daher mit diesem Thema noch nicht vertraut, habe es bisher noch nie gemacht.
Es gibt viele Möglichkeiten um Dateien zu übertragen, jedoch soll es von vielen Clients gleichzeitig möglich sein und bisher habe ich viel gefunden, was mir hilft.
 
Hallo,
meiner Erfahrunge nach, ist die Übertragung per FTP recht unzuverlässig. Insbesondere große Dateien werden gerne mal unvollständig/fehlerbehaftet übertragen.

greetz
hroessler
 
FTP und C# ist ein Horror.
Folgendes ist empfehlenswert:

Serverseitige Administration:
Archive splitten! Gesicherte Verbindung verwenden! Organisatorisch (administrativ) automatisieren (Datei-Upload zur Bereitstellung, Checksummen, Splitting, etc.).

Client:
Weitere Kommunikation (Anzahl Archive, Checksummen)

Kleinere gesplittete Archive verwenden damit Clients im Falle eines Verbindungsabbruches (Neustart/Shutdown, Netzwechsel, etc) nicht noch mal von 0 Anfangen müssen.

Für C# gibts hier für Archive mehrere Möglichkeiten. Wenn du .NET 4.5 verwendest, wirds einfacher.
http://stackoverflow.com/questions/940582/how-do-i-zip-a-file-in-c-using-no-3rd-party-apis

mfg,
Max
 
Zuletzt bearbeitet:
Zusätzlich zu dem was max_1234 sagte würde ich mir an deiner Stelle Delta-Encoding anschauen. Je nach dem um was für Daten und Updates es sich handelt, kann man damit viel einsparen. Eine mögliche Implementierung wäre da Xdelta.

Oder anstatt alle Dateien in einem Archiv zu übertragen, könntest du ebenso jede Datei einzeln übertragen (macht nur Sinn, wenn es nicht massenhaft viele kleine Dateien sind) - optional mit Komprimierung und Delta Kodierung.
Ich habe sowas mal gebaut (jedoch ohne Komprimierung und Delta Kodierung): Updater und dazu einen sehr simplen Generator der Update-Index-Datei (oder wie auch immer man das nennen will): updaterhasher - das darfst du gerne klauen.
 
Zurück
Oben