Datei vom Webservice laden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datei vom Webservice laden

    Guten Tag,

    ich habe mal einige fragen zu dem vorhaben, Dateien von Webservice downloaden?
    Ich habe einen C# Webservice und eine Swift - Project (iPad App) beide kommunizieren wunderbar, wenn es darum geht einfache Daten abzuholen(Datenbank abfragen).
    Nun möchte ich über das iPad Daten downloaden (vom Webservice)!? So läuft es: -> Mein Webserivce befindet sich auf meinem Rechner im IIS(sodass Rechner, im selben LAN darauf zugreifen können) und das iPad per VPN in meinem Netzwerk ist und somit den Webservice ansteuern kann.

    Jetzt möchte ich aber wenn auf meinem Rechner (in einem bestimmten Ordner) neue Dokumente hinterlegen (.txt - Dateien), dass iPad soll überprüfen ob die Daten auf dem iPad aktuell sind und wenn nicht sollen die neue Datei über den Webservice gedownloadet werden.

    -> In meinem iPad - Project Ordner befinden sich drei .txt - Dateien (Name1.txt, Vor1.txt und Ort1.txt) auf meinem Rechner gibt es die identischen .txt - Dateien, nun möchte ich das wenn das iPad eine VPN besitzt und in meine App navigiert wird, soll er erst vergleichen ob es über den Webservice neue .txt - Dateien geladen werden können. Sollte das der fall sein, dann soll er diese Downloaden und die alten ersetzen! Diese soll auch nach App Schließung im Project Ordner bleiben(sodass immer die aktuellste im Project Ordner bleibt) und nicht wieder mit dem alten .txt - Datei gefüllt werden!

    Ziel dieses Vorhabens: Sollte mit dem iPad keine VPN Verbindung möglich sein, so soll auf die .txt - Dateien zugegriffen werden, sodass auch eine Offline Bearbeitung möglich ist!

    Könnt Ihr mir sagen ob so etwas möglich ist? Falls jemand so was gemacht hat mir sein Code teilen kann? :love: Denn irgendwie verstehe ich es am besten wenn ich den dazugehörigen Code sehen kann!

    Danke für das lesen und für jede Hilfe.

    Liebe Grüße
    :evil: Catch me if u can :evil:
  • setze vom iPad aus eine anfrage an den webservice ab der dir alle dateien listet die geladen werden können. mit dateiname (oder einer eindeutigen id falls vorhanden) und einem hash des contents.
    das iPad vergleicht dann mit dem was es lokal hat und läd das runter was nicht mehr korrekt ist oder eben hinzugekommen ist.
  • Wie kann ich eine solche anfrage senden? Im moment benutze ich die SOAPEngine von Prior (github.com/priore/SOAPEngine). Früher habe ich das mit NSURLConnection gemacht, doch seit dem umstieg von Swift 1.2 zu Swift 2.0 ist das nicht mehr möglich, er hat nie eine Verbindung aufgebaut, daher musste ich zu SOAPEngine übergreifen.
    Wenn Du mir sagen kannst wie ich die Anfrage steuern oder tätigen kann. werde ich mich in die brauchbaren lassen einlesen.

    Liebe Grüße
    :evil: Catch me if u can :evil:
  • Styler_05 schrieb:

    Wie kann ich eine solche anfrage senden? Im moment benutze ich die SOAPEngine von Prior (github.com/priore/SOAPEngine). Früher habe ich das mit NSURLConnection gemacht, doch seit dem umstieg von Swift 1.2 zu Swift 2.0 ist das nicht mehr möglich, er hat nie eine Verbindung aufgebaut, daher musste ich zu SOAPEngine übergreifen.
    Wenn Du mir sagen kannst wie ich die Anfrage steuern oder tätigen kann. werde ich mich in die brauchbaren lassen einlesen.

    Liebe Grüße
    Wenn Du einen Fehler in Deinem Code hast, dann nimmst Du halt einfach ein anderes Framework?

    Auch eine Möglichkeit
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Styler_05 schrieb:

    Wie kann ich eine solche anfrage senden? Im moment benutze ich die SOAPEngine von Prior (github.com/priore/SOAPEngine). Früher habe ich das mit NSURLConnection gemacht, doch seit dem umstieg von Swift 1.2 zu Swift 2.0 ist das nicht mehr möglich, er hat nie eine Verbindung aufgebaut, daher musste ich zu SOAPEngine übergreifen.
    Wenn Du mir sagen kannst wie ich die Anfrage steuern oder tätigen kann. werde ich mich in die brauchbaren lassen einlesen.

    Liebe Grüße
    Wenn Du einen Fehler in Deinem Code hast, dann nimmst Du halt einfach ein anderes Framework?
    Auch eine Möglichkeit
    hab ich mir auch schon gedacht aber der unsitte kommt man heute wohl nicht mehr bei.
    lieber als seine 3 zeilen code anzupassen wird ein fremdes framework mit möglichen hintertüren, sichrheitslücken, lizenzen etc ins eigene projekt gezogen - hauptsache damit klappt es beim ersten test...
  • Styler_05 schrieb:

    Wie kann ich eine solche anfrage senden? Im moment benutze ich die SOAPEngine von Prior (github.com/priore/SOAPEngine). Früher habe ich das mit NSURLConnection gemacht, doch seit dem umstieg von Swift 1.2 zu Swift 2.0 ist das nicht mehr möglich, er hat nie eine Verbindung aufgebaut, daher musste ich zu SOAPEngine übergreifen.
    Wenn Du mir sagen kannst wie ich die Anfrage steuern oder tätigen kann. werde ich mich in die brauchbaren lassen einlesen.

    Liebe Grüße
    NSURLConnection ist veraltet, aber die Ursache war sicherlich eine andere.
    Kannst ja einfach NSURLSession nehmen, oder wie das Ding heisst. Beispiel siehe unten.

    Viele Grüße

    C-Quellcode

    1. +(NSData*)abc_sendSynchronousRequest:(NSURLRequest*)aRequest
    2. {
    3. // …
    4. if(aRequest == nil)
    5. {
    6. return nil;
    7. }
    8. // …
    9. dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    10. if(semaphore == NULL)
    11. {
    12. return nil;
    13. }
    14. // …
    15. __block NSData *aData = nil;
    16. // …
    17. NSURLSession *URLSession = [NSURLSession sharedSession];
    18. if(URLSession == nil)
    19. {
    20. return nil;
    21. }
    22. // …
    23. void (^handler)(NSData *data, NSURLResponse *response, NSError *error);
    24. handler = ^(NSData *data, NSURLResponse *response, NSError *error)
    25. {
    26. // …
    27. if(error == nil)
    28. {
    29. aData = data;
    30. }
    31. // …
    32. dispatch_semaphore_signal(semaphore);
    33. // …
    34. };
    35. // …
    36. NSURLSessionDataTask *URLSessionDataTask = [URLSession dataTaskWithRequest:aRequest
    37. completionHandler:handler];
    38. if(URLSessionDataTask == nil)
    39. {
    40. return nil;
    41. }
    42. // …
    43. [URLSessionDataTask resume];
    44. // …
    45. dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    46. // …
    47. return aData;
    48. // …
    49. }
    Alles anzeigen
  • little_pixel schrieb:

    Theorie und Praxis. Da kann ich Dir aber viel zeigen, wo synchron gearbeitet wird/wurde und sogar bei Apple.
    In der Praxis kann eine synchrone Anfrage schnell zu einer Ablehnung im App-Store führen, und schlechte Programmierung gibt's überall; sogar bei Apple.

    little_pixel schrieb:

    Zum Beispiel in einer Queu, die nur Status von 0,1 etc. abholt.
    Da "lohnt" ein asynchroner Request nicht.
    Auch ein einzelnes Byte kann mehr als 1 Sekunde unterwegs sein. Dann hast du dank der Status-Abfrage eine ruckelige App. Latenzen im Netz haben ja in der Regel weniger mit der Datenmenge zu tun. Lustig wird es auch, wenn der Server die Anfrage annimmt aber keine Antwort sendet.

    Was „lohnt“ denn nicht an einer asynchronen Abfrage? Die Statements in einen Block anstatt hinter die Anfrage zu schreiben?
    „Meine Komplikation hatte eine Komplikation.“
  • Hallo,
    danke für eure Kommentare. Ich werde es umsetzen.
    Ich werde dann in Zukunft mit NSURLSession statt mit NSURLConnections arbeiten. Somit lasse ich das fremde Framework weg.

    Thallius schrieb:

    Styler_05 schrieb:

    Wie kann ich eine solche anfrage senden? Im moment benutze ich die SOAPEngine von Prior (github.com/priore/SOAPEngine). Früher habe ich das mit NSURLConnection gemacht, doch seit dem umstieg von Swift 1.2 zu Swift 2.0 ist das nicht mehr möglich, er hat nie eine Verbindung aufgebaut, daher musste ich zu SOAPEngine übergreifen.
    Wenn Du mir sagen kannst wie ich die Anfrage steuern oder tätigen kann. werde ich mich in die brauchbaren lassen einlesen.

    Liebe Grüße
    Wenn Du einen Fehler in Deinem Code hast, dann nimmst Du halt einfach ein anderes Framework?
    Auch eine Möglichkeit
    War mir zu dem Zeitpunkt das einfachste xD

    gritsch schrieb:

    Thallius schrieb:

    Styler_05 schrieb:

    Wie kann ich eine solche anfrage senden? Im moment benutze ich die SOAPEngine von Prior (github.com/priore/SOAPEngine). Früher habe ich das mit NSURLConnection gemacht, doch seit dem umstieg von Swift 1.2 zu Swift 2.0 ist das nicht mehr möglich, er hat nie eine Verbindung aufgebaut, daher musste ich zu SOAPEngine übergreifen.
    Wenn Du mir sagen kannst wie ich die Anfrage steuern oder tätigen kann. werde ich mich in die brauchbaren lassen einlesen.

    Liebe Grüße
    Wenn Du einen Fehler in Deinem Code hast, dann nimmst Du halt einfach ein anderes Framework?Auch eine Möglichkeit
    hab ich mir auch schon gedacht aber der unsitte kommt man heute wohl nicht mehr bei.lieber als seine 3 zeilen code anzupassen wird ein fremdes framework mit möglichen hintertüren, sichrheitslücken, lizenzen etc ins eigene projekt gezogen - hauptsache damit klappt es beim ersten test...

    Es waren mehr als 3 Zeilen :P
    Aber ich gebe euch recht.

    Ich werde es dann mal mit NSURLSession versuchen und hier achte ich darauf das ich keine synchronen Abfragen mache!

    Danke für die Hilfe.

    LG
    :evil: Catch me if u can :evil: