2012-05-25 34 views
0

我有一個名爲DataElement的數據對象。它包含一串Base64轉換後的圖像字節,以及其他一些字段。發佈AFNetworking失敗的序列化對象

我試圖張貼此我WCF服務,我得到一個錯誤「預期的狀態碼(200-299),有400

的目標是發佈數據+圖像的WCF(休息)服務,並獲得一個修改後的圖像 - 端到端測試我正在做什麼。

在我的post方法中,如果我將編碼的字符串留空在對象上,一切正常 - 但如果該字符串不是空的,我會得到這個錯誤。

我的WCF服務甚至沒有被擊中,它只是炸彈正確的錯誤。這是我的post方法...我做錯了什麼?

- (void)postDataToServer:(NSString*)server dataElement:(DataElement*)dataElement asJson:(BOOL)useJson 
{ 
NSString *urlString = [[NSString alloc] init]; 
NSData *encodedData; 

urlString = [[server copy] stringByAppendingString:@"EchoXml"]; 
encodedData = [self encodeDataElementAsXml:dataElement]; 

NSURL *url = [NSURL URLWithString:urlString]; 
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; 

NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST" path:urlString parameters:nil]; 
[request setHTTPBody:encodedData]; 

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    [_responseTextView setText:[NSString stringWithFormat:@"Successfully uploaded file to %@", urlString]]; 

    NSObject *httpResponseObject; 

    httpResponseObject = [self parseResponseAsXml:responseObject]; 

    if ([httpResponseObject isKindOfClass:[DataElement class]]) 
    { 
     DataElement *dataElement = (DataElement *)httpResponseObject; 
     _responseTextView.text = dataElement.DataText; 
     if (dataElement.DataImageBase64 != nil) 
     { 
      UIImage *dataImage = [self getImageFromString:dataElement.DataImageBase64]; 
      self.responseImageView.image = dataImage; 
     } 
    } 

    NSLog(@"Successfully uploaded file to %@", urlString); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    // It goes here immediately 
    [_responseTextView setText:[NSString stringWithFormat:@"Error: %@", error]]; 
    NSLog(@"Error: %@", error); 
}]; 

[operation start]; 
} 

編輯:對不起格式有靠不住的時候我粘貼它...

回答

0

我知道它的不良形式來回答我自己的問題,但我發現並解決了問題。底線,我上面使用的代碼是很好的 - 也許不是最優的(正如Kurt指出的那樣),但它完成了它應該做的事情。

問題在於我的WCF服務 - 默認情況下,REST服務請求具有65k的上傳限制。我重新配置了服務以允許大文件上傳,並且一切都很好。

1

代碼的重要部分是:

NSString* urlString = [server stringByAppendingString:@"EchoXml"];  
NSURL *url = [NSURL URLWithString:urlString]; 
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];  
NSMutableURLRequest *request = [httpClient 
    requestWithMethod:@"POST" path:urlString parameters:nil]; 

的實際網址AFNetorking請求是AFHTTPClient的基本URL,並附加指定的path

您的錯誤是您再次指定了相同的urlString

因此,如果urlStringhttp://your.server.com/EchoXml,那麼您請求的有效URL是http://your.server.com/EchoXmlhttp://your.server.com/EchoXml。如你所見,這不起作用。

修復您的基本網址和路徑,使其更合適。由於您沒有說明您嘗試訪問的URL,因此很難提供更多詳細信息。也許server應該是基地址,並且EchoXml的路徑?

+0

我會研究這個 - 但即使這是不正確的,我不認爲網址是錯誤的 - 這個代碼工作得很好,如果dataelement屬性沒有設置數據。我已經驗證了這一點,因爲我的WCF服務,我可以打破我的斷點。只要將數據添加到該屬性就可以打破它。 – Nicros

+0

啊,對不起,我錯過了你說過的話「如果我把編碼的字符串留在對象上一切都很好」。 –