2010-10-04 18 views
5

Bir SOAP WS arabirimine sahip bir uygulamaya ilişkin bir IPhone/IOS Obj-C SOAP istemcisi yazmakta sorun yaşıyorum. Uygulama, bir NuSOAP php web sunucusu kullanır ve istemci tarafından etkinleştirilmiş olan gzip/deflate kullanarak belirli bir boyutun üzerindeki herhangi bir yükü kodlar.NSURLConnection: gzip şifreli SOAP yanıtı bozuldu

NSURLConnection öğesinin herhangi bir gzip kodlanmış yanıtını saydam bir şekilde açtığını ve sıkıştırılmış yanıtı sunduğunu biliyorum, ancak bu durumda alınan ham yanıt bozuk görünüyor. SOAP yükünü bir dosyaya bıraktım ve gunzip kullanarak sıkıştırdım, "beklenmedik bir dosya sonu" ydu. Web sunucusunu kontrol ettim ve bir dosyaya gönderdiği gzip cevabını döktüm, bu, gunzip kullanarak herhangi bir hata olmadan sıkıştırılmış. Yanıt alındığında yanıtı bozuyor gibi görünüyor.

Hem NSURLConnection hem de ASIHTTPRequest kullanmayı denedim. NSURLConnection ile, yanıt Veri uzunluğu ve yanıtın HTTP başlığında belirtilen uzunluk arasında, her defasında tam olarak 15 bayt fark vardır. ASIHTTPRequest ile alınan alınan bayt sayısı ve HTTP Header'daki yanıtın uzunluğu eşleşir ancak yanıt hala bozuktur ve gzip dekompresyonuna cevap vermez. 37:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
    NSLog(@"Headers :%@",[(NSHTTPURLResponse*)response allHeaderFields]); 
     [self.receivedData setLength:0]; 
    self.receivedData = [[NSMutableData dataWithCapacity:1024*1024] retain]; 
    } 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)value { 
    NSString *dataRec = [[NSString alloc] initWithData:value encoding:NSUTF8StringEncoding]; 
    NSLog(@"didReceiveData :%@",dataRec); 
    [self.receivedData appendData:value]; 
} 

2010-10-04 13 15,310 SugarSoap [848: 207] Başlıkları: { "Cache-Control" = "No-mağaza no-cache, olmalı-revalidate, kontrol sonrası = 0, ön kontrol = 0 "; Bağlantı = "Keep-Alive"; "Content-Encoding" = gzip; "İçerik Uzunluğu" = 1683; "Content-Type" = "text/xml; charset = UTF-8"; Tarih = "Pzt, 04 Eki 2010 08:07:14 GMT"; Expires = "Cum, 19 Kas 1981 08:52:00 GMT"; "Keep-Alive" = "timeout = 15, max = 100"; Pragma = "no-cache"; Sunucu = "Apache/2.0.59 (Unix) mod_ssl/2.0.59 OpenSSL/0.9.8g DAV/2 PHP/5.2.5"; "Set-Cookie" = "PHPSESSID = udsgtttvts90ijuhsvuqop6ja6; path = /"; Vary = "Accept-Encoding"; "X-Powered-By" = "PHP/5.2.5"; "X-Soap-Server" = "NuSOAP/0.7.2()"; } 2010-10-04 13: 37: 15,311 SugarSoap [848: 207]

didReceiveData: (boş) 2010-10-04 13: 37: 15,311 SugarSoap [848: 207] connectionFinsihed! Süre: 1668

-(void)requestFinished:(ASIHTTPRequest *)request { 
    if([request isResponseCompressed]){ 
     NSLog(@"Response Compressed."); 
    } 
    NSData *compressedResponse = [request rawResponseData]; 
    NSData *responseData = [request responseData]; 
    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 
    NSLog(@"Length before decompression:%d Length after decompression:%d", compressedResponse length],[responseData length]); 
    NSLog(@"Response :%@",responseString); 
} 

2010-10-04 14: 11: 20,687 Hello_SOAP [1033: * 207] Sıkıştırılmış Müdahale. 11:

2010-10-04 14

20,687 Hello_SOAP [1033: * 207] dekompresyon önce Süre: dekompresyondan sonra 2165 Süre: 0

2010-10-04 14: 11: 20,687 Hello_SOAP [1033: * 207] Yanıt:

cevap

0

Biraz bozuk bir dosya Mac'imde herhangi bir sorun çıkarmadan unzip zaman bir sorun vardı, ama iPhone'da olmaz. IPhone'da zlib'in hatalara daha az toleransı olduğunu düşünüyorum.

0

-connection:didReceiveData:'un -connection:didReceiveResponse:'dan en az bir kez çağrılmadığından emin misiniz? Üstbilgilerle ilk pakette gelen verilerin bir kısmını kesiyor olabilirsiniz.

+0

Evet, doğru sırayla çağrılan ... Bu bağlantının yardım olabilir. Ve alınan tüm verileri günlüğe kaydediyorum, sanırım sıralı olarak çağrılsa bile veri görünmelidir. Ayrıca, WS sunucu tarafında gzip kodlamasını devre dışı bıraktığımda SOAP çağrısı mükemmel şekilde çalıştığını unutmayın. – Bala

0

Verilerinizin UTF8 olduğundan emin misiniz? Diğer kodlamaları dene ve hatanın gidip gitmediğine bakın.

+0

Evet, veri kodlaması UTF8'dir. Aynı mesaj yükü gzipli değilse UTF8 kod çözümü mükemmel şekilde çalışır. Ve diğer kodlamaları da denedim, çok fazla başarıya ulaşamadım. – Bala