Json Base64 Imagegröße

  • Json Base64 Imagegröße

    Hallo,

    ich versuche, ein Image im Base64 - Format über einen ASP.net WebService in einem SQL-Server zu speichern. Das funktioniert auch, wenn das Bild kleiner als 50 KB ist. Sobald das Bild größer wird, gibt der WebService JsonError = true zurück, die WebMethod wird gar nicht angesprochen, das der IIS dies anscheinend gar nicht durchlässt. Eigentlich sollte das bei dieser Größe doch noch kein Problem sein.


    Gruß

    Ralf
  • das json in dem das base64-codierte image liegt ist korrekt?
    die base64 daten auch?
    du sendest die daten per POST und nicht per GET?
    die daten kommen am server korrekt and? (kannst du den webservice debuggen?)
    der webservice nimmt mehr als 50k an? (doku?)
    in der db werden die daten dann wohl hoffentlich nicht mehr als base64 gespeichert sondern als blob (das hat mit deinem problem aber nix zu tun...)
  • was heist die daten kommen nicht an? was denn genau kommt denn dann an? nur ein teil der daten sodass er erkennt dass es sich nicht um korrektes json handelt?

    eventuell auch mal mit tcpdump schauen was genau da über die leitung geht - vielleicht stimmt der length-header nicht oder was weis ich...
  • Um auszuschließen, dass auf iOS-Seite noch ein Fehler vorliegt, hier mein Code:

    NSData *DataOutput = UIImagePNGRepresentation(_ImageViewContract.image);
    NSString *Base64Output = [DataOutput base64EncodedStringWithOptions:0];
    NSDictionary *DictionaryOut = [NSDictionary dictionaryWithObjectsAndKeys: _PersonenID, @"PersonenID", Base64Output, @"Vertrag", nil];
    NSString *Json = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:DictionaryOut options:NSJSONWritingPrettyPrinted error: nil] encoding:NSUTF8StringEncoding];
    NSURL *Url = [NSURL URLWithString:@"http://192.168.178.26/KundenService/WebServiceKunde.asmx/UpdateContract"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:Url];
    request.timeoutInterval = 5;
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:[Json dataUsingEncoding:NSUTF8StringEncoding]];
    NSURLResponse *Response;
    NSError *Error;
    [NSURLConnection sendSynchronousRequest:request returningResponse: &Response error: &Error];

    Wenn ich den Json - String wieder in ein UIImage konvertiere, wird das Bild wieder angezeigt, nur der Webservice nimmt es nicht an.
  • MyMattes hat Recht: Ohne Code-Tags macht das keinen Spaß. Deshalb auch nicht gründlich angesehen. Nur drei Sachen, die mir trotzdem ins Auge gesprungen sind:

    - 5s timeoutInterval ist _sehr_ optimistisch. Kann sein, dass der da reinläuft
    - synchrone Netzwerkzugriffe sind nur sehr selten eine gute Idee
    - Versuch' mal, bei base64EncodedStringWithOptions: eine der Zeilenumbruch-Optionen zu setzen, einige Server mögen keine sehr langen Textzeilen
    Multigrad - 360°-Produktfotografie für den Mac
  • Der Projektlose schrieb:

    Ich habe mal einen Webeleine in C# geschrieben, der das gleiche macht. Auch hier tritt das gleiche Problem auf, wenn das Bild zu groß ist. Der IIS hat eine Standardbeschränkung von 30 MB pro Request. Das sollte eigentlich reichen. Also liegt das Problem wahrscheinlich in den Request - Parametern begründet.
    wenn es damit das gleiche problem gibt, dann liegt der fehler eindeutig am webserver. und der sollte das problem auch irgendwo loggen. zumindest der indianer würde es tun - mit dem IIS kenne ich mich nicht aus.
  • Die Größe stand im ersten Beitrag - ab 50KB geht's schief. Selbst mit den 36% drauf ist das ja eigentlich noch keine Größe, bei der ein aktueller Server dicht macht, aber kann natürlich sein. Ohne weitere Informationen vom TE, was die Vorschläge hier ergeben haben (Logs, tcpdump etc) ist das hier wohl eher ein Gestocher im Nebel...
    Multigrad - 360°-Produktfotografie für den Mac
  • Wenn ich den Webservice über den Internet Explorer aufrufe und die entsprechenden Felder (ID, Base64) manuell eingebe, nimmt der Dienst auch Bilder über 600 KB an und speichert sie korrekt. Als scheint der Webservice im IIS einwandfrei zu funktionieren. Bei längerem Json String kommt anscheinend nicht mehr alles komplett an. Die ISS - Protokolle weisen lediglich auf den Fehler 500 hin.
  • du hast ein form erstellt und über dieses schickst du die daten oder hast du dir die query manuell zusammengebaut und schickst sie per GET?

    aber wie gesagt: mach nen tcp-dump davon und von den daten die du mit der app schickst, dann vergleiche es und schon siehst du woran es liegt. eventuell irgendwelche header etc...
  • Der Projektlose schrieb:

    Es lag an der Web.config im Webservice.
    Diese muss um folgenden Eintrag ergänzt werden:

    <system.web.extensions>
    <scripting>
    <webServices>
    <jsonSerialization maxJsonLength="5000000"/>
    </webServices>
    </scripting>
    </system.web.extensions>
    versteh ich nicht, das system muss ja nichts mehr serialisieren, das wurde doch bereits erledigt. wennschon dann deserialisieren.
  • Nuja, in Objective-C heißt das Ding ja auch NSJSONSerialization, obwohl es sowohl serialisiert als auch deserialisiert.

    Wenn das im IIS genauso ist und er sich weigert, JSON von einer bestimmten Länge zu serialisieren oder zu deserialisieren…
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P