2011-09-28 47 views
1

我一直在爲這個bug /問題而自殺幾天,現在我瘋了。我不知道爲什麼它是休息。我想知道你們和加爾可以借我一把,擺脫我的瘋狂。所以提前謝謝你。ios 4.3上傳文件到wcf json web服務

我在做什麼:從iphone應用程序(ios 4.3)上傳.wav文件到wcf json web服務(.net 4.0)。我已經驗證該服務確實可以從另一個客戶端運行。

問題:問題是iPhone應用程序在5天前工作的代碼相同。昨天和今天的代碼決定不起作用。服務和iPhone應用程序沒有任何改變。

我會盡我所能發佈儘可能少的代碼,以使事情與主題保持相關和簡單。如果需要發佈更多代碼以使所有人都更容易,我會這樣做。

我始終從didReceiveResponse方法中的響應獲取狀態代碼400。我檢查了多次發佈的網址,並且該網址似乎對我有效。

我發佈到json web服務的文件大小爲1KB < fileSize < 450KB。

這裏是一個樣本網址,我發佈到: http://random-ec2-id-east-1.elb.amazonaws.com/sampleApp/?key=ee404d54-ea45-421a-9633-1ea35c0c211e&token=zJSRqiZgmU6nOW44CeAzhWYxasdD0158yysNDCiASMk.eyJpdiI6IlU3Y2UwbWNXVGN6WVVBLU42SDVieGcifQ.kLbcRPOJ_QnrrtsBe-zF2-2IIbAffArvqeyAmwp_OpOWAoADMugHYjTPcnjkjQvzxEIMcm2k3933i3GqF2YFhAFDtItwvqre5fIGlixbuwsYhrVCm9FBoue4dCQ_pPX-yjUtq_898FGWa5INl0RG0A&type=c&platform=i

// ################################ 
    - (id)init { 
     self = [super init]; 

     if (self) { 

     self.sampleAppInstance = [sampleAppInstance sharedSampleAppInstance]; 

     self.sampleAppUrl = @"http://random-ec2-id.us-east-1.elb.amazonaws.com/sampleApp/"; 
     self.key = @"ee404d54-ea45-421a-9633-1ea35c0c211e"; 
     self.token = self.sampleAppInstance.facebook.accessToken; // facebook access token 
     self.type = @"c"; 
     self.platform = @"i"; 

     } 

     return self; 
    } 


    // ################################# 
    - (BOOL) save:(NSString *)_fileName { 

     NSString *url = [NSString stringWithFormat:@"%@?key=%@&token=%@&type=%@&platform=%@", self.sampleAppUrl, self.key, self.token, self.type, self.platform]; 
     NSData *voiceData = [NSData dataWithContentsOfFile:_fileName]; 

     //NSLog(@"%@", url); 

     NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]] autorelease]; 
     [request setValue:@"text/plain" forHTTPHeaderField:@"content-type"]; 
     [request setHTTPMethod:@"POST"]; 

     [request setValue:[NSString stringWithFormat:@"%d", [voiceData length]] forHTTPHeaderField:@"content-length"]; 
     [request setHTTPBody:voiceData]; 

     [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 

     return FALSE; 
    } 

    // ################################# 
    - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { 
     //NSLog(@"did failed"); 
     [self.delegate responseDidFailWithError:error]; 
    } 

    // ################################# 
    - (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
     //NSLog(@"did receive data"); 
     //NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); 
     [self.delegate responseDidReceive:data]; 
    } 

    // ################################# 
    - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; 
     int statusCode = [httpResponse statusCode]; 

     // if get 400, then malform syntax 
     //NSLog(@"%d", statusCode); 
     if (statusCode != 200) 
     [self.delegate responseDidFailWithStatusCode:statusCode]; 
    } 
+0

由於格式錯誤,服務器無法理解請求。客戶端不應該不經修改就重複請求。你檢查'voiceData長度'嗎? – Nekto

+0

感謝您閱讀我的文章。根據你的問題。 voiceData的長度總是> 0.所以文件正在發佈。對於1秒文件,其長度爲50000,文件長度爲10秒,大約爲430000。上傳到json web服務時,文件的大小有限制嗎? –

回答

0

事實證明,我的服務只接受文件大小65K <默認。解決的辦法是將我的服務配置爲接受> 65k的文件。