2013-04-16 54 views
1

我在objective-c中構建JSON文章並將其發送到ASP.NET MVC控制器。當通過NSMutableURLRequest發送到APS.NET MVC控制器時截斷JSON

我建立了NSMutableURLRequest如下:

request = [[NSMutableURLRequest alloc] initWithURL:url]; 

    NSString* jsonRequest = [NSString stringWithFormat: @"{\"collection\":\"images\",\"id\":\"%@\",\"objectjson\":%@}",response.id,response.json]; 

    NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]]; 

    [request setHTTPMethod:@"POST"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody: requestData]; 

我再發送請求如下:

 NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init]; 

     [NSURLConnection sendAsynchronousRequest:request queue:backgroundQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 
     { ... completion code goes here 

這行之有效的大部分時間。但是,對於非常大的JSON字符串,偶爾會發生Web服務錯誤,其中Web服務報告它正在JSON中遇到文件結尾標記。看起來JSON正在被截斷。

我正在發送JSON到ASP.NET MVC控制器。

有沒有人有任何智慧的話可能會發生什麼?是否有任何ASP.NET Web配置設置可能需要進行調整以防止發生此問題。

我不明白的一件事是爲什麼它是這樣一個間歇性的問題。

+0

有同樣的問題。網上找不到任何東西。不知道它是iOS還是IIS ...我個人會傾向於責怪IIS,但誰知道... – jjxtra

+0

也許這個鏈接幫助:http://stackoverflow.com/questions/12662282/content-length-of-http-request -body-size/12832707#12832707 – jjxtra

+0

在我的服務器上進行了一些日誌記錄,發現內容長度標頭確實是由我的iOS應用程序設置的正確值,但實際流包含的字節數少於內容長度。有些字節必須在傳輸過程中丟失,可能是由於3G連接是我的猜測。除了告訴客戶再試一次之外,不清楚是否有工作。 – jjxtra

回答

2

這似乎是3G或EDGE連接丟失字節的結果。我可以想到的最好的想法是在服務器上檢測到內容長度標題大於請求POST主體並返回一個狀態代碼,告訴客戶端再次嘗試。客戶端可以通過url的重試計數,服務器可以讀取它,如果它是一個特定的值,服務器將返回一個錯誤代碼,指示不應該嘗試重試。我知道醜,但我想不出更好的辦法。這是我要爲我的照片上傳應用程序做的。

祝你好運!

0

的問題是在轉換爲NSData的

試試這個

NSData *requestData = [jsonRequest dataUsingEncoding:NSUTF8StringEncoding];