Problem NSURLConnection XML-String an Server schicken

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

  • Problem NSURLConnection XML-String an Server schicken

    Hallo,

    ich schreibe meine CoreData-Daten (inkl. Bilder) in einen XML String und diesen String an einen Server schicken.

    Dafür habe ich einen NSMutableURLRequest (Post) und eine asynchrone NSURLConnection.

    Das Problem ist jetzt, dass er den String manchmal schickt, und manchmal nicht. Das hängt anscheinend mit der Länge des Strings zusammen.

    Erstmal der Quelltext:

    Quellcode

    1. NSString *parameterString = [NSString stringWithFormat: @"%@?user=%@&pass=%@&method=%@&body=%@&data=INSPECTION",
    2. [defaults objectForKey:kUrl],
    3. [defaults objectForKey:kUsername],
    4. [defaults objectForKey:kPassword],
    5. @"put", xmlString2];
    6. NSData *postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding];
    7. NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
    8. NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:parameterString]];
    9. [urlRequest setHTTPMethod:(@"POST")];
    10. [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    11. [urlRequest setHTTPBody:postData];
    12. [urlRequest setValue:postLength forHTTPHeaderField:@"Content-Length"];
    13. [NSURLConnection connectionWithRequest:urlRequest delegate:self];
    Alles anzeigen



    Die NSURLConnection Delegate Methoden:

    Quellcode

    1. - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    2. NSLog(@"Succeeded!");}
    3. - (void)connection:(NSURLConnection *)connectiondidFailWithError:(NSError *)error {
    4. NSLog(@"Connection failed! Error - %@ %@",
    5. [error localizedDescription],
    6. [[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
    7. }
    8. - (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite {
    9. NSLog(@"Total Written: %i", totalBytesWritten);
    10. NSLog(@"Total Expected: %i", totalBytesExpectedToWrite);
    11. }
    12. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    13. NSLog(@"Data received");
    14. }
    Alles anzeigen



    Wie gesagt, manchmal sendet er alles, dann wiederum führt er die Delegate Methode mit den "BytesWritten" nur 4 mal aus:
    Total Written: 13511
    Total Expected: 117657
    Total Written: 16307
    Total Expected: 117657
    Total Written: 19103
    Total Expected: 117657
    Total Written: 21899
    Total Expected: 117657


    Dann macht er nichts mehr, aber der ActivityIndicator dreht sich dennoch schön weiter. Eine Fehlermeldung bekomme ich auch nicht.
    V.a. mit mehreren Bildern und der daraus resultierenden Größe des Strings schlägt es immer fehl.
    Mit max. 1-2 Bildern führt er es meist normal aus:
    Total Written: 32768
    Total Expected: 63328
    Total Written: 63328
    Total Expected: 63328

    Die Bilder habe ich auch schon auf 10% der ursprünglichen Größe reduziert, aber dennoch das selbe Problem.
    Habe auch schon andere Möglichkeiten wie synchronen Request probiert. Aber immer das selbe Problem.
    Wenn ich zB einen synchronen Request mache, dann bringt er mir immer einen "Connection timeout" Fehler.
    Auch mit [urlRequest setTimeoutInterval:60.0] oder einer anderen Zeitangabe.

    Hoffe mir kann jemand nen Denkansatz geben oder mich auf meinen Fehler hinweisen.
    Knowing is not enough, we must apply.
    Willing is not enough, we must do.
  • Habs mal geändert in

    Quellcode

    1. NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];
    2. [conn start];



    Aber es passiert genau das selbe. 4 mal führt er die Delegate Methode aus und danach geschieht nichts mehr.
    Total Written: 5187
    Total Expected: 125981
    Total Written: 7983
    Total Expected: 125981
    Total Written: 10779
    Total Expected: 125981
    Total Written: 13575
    Total Expected: 125981

    Habs auch mal mit ASIHTTPRequest probiert (synchron/asynchron), da bekomm ich immer einen Timeout Error (Connection failed! Error - The request timed out)
    Knowing is not enough, we must apply.
    Willing is not enough, we must do.
  • Danke an alle für die Hilfestellungen.

    Habs mittlerweile hinbekommen.

    Alles schön aufgeteilt. Parameter in den Body und alles andere wichtige in die Delegate Methoden. Auch nochmal den String URL-Kodiert.
    Jetzt funktioniert alles.
    Knowing is not enough, we must apply.
    Willing is not enough, we must do.