2012-05-25 3 views
0

У меня есть объект данных, называемый DataElement. Он содержит строку байтов изображений Base64, а также пару других полей.Проводка сериализованного объекта с сбоем AFNetworking

Я пытаюсь отправить это к моей службе WCF, и я получаю сообщение об ошибке «Прогнозный коде состояния в (200-299), получил 400.

Цель состоит в том, чтобы получить возможность отправлять данные + изображение в WCF (отдохнуть) и получить модифицированное изображение - окончательное испытание того, над чем я работаю.

В моем методе post, если я оставляю закодированную строку пустой на объекте, все работает просто отлично, но если эта строка является чем-то другим, кроме пустого, я получаю эту ошибку.

Служба WCF даже не попадает в цель, она просто бомбирует право на ошибку. Вот мой метод почты ... что я делаю неправильно?

- (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]; 
} 

Edit: К сожалению форматирование есть шаткий, когда я вставил его в ...

ответ

0

Я знаю его плохую форму, чтобы ответить на мой собственный вопрос, но я нашел и исправил проблему. Итог, код, который я использовал выше, хорошо, может быть, не оптимален (как заметил Курт), но он делает то, что должен делать.

Проблема была в моем сервисе WCF. Запросы службы REST по умолчанию имеют ограничение на загрузку 65 тыс. Я переконфигурировал службу, чтобы разрешить большие загрузки файлов, и все хорошо.

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]; 

Фактический URL, который AFNetorking запросов является AFHTTPClient , с указанным в нем path.

Ваша ошибка в том, что вы указываете тот же urlString еще раз.

Итак, если urlString - http://your.server.com/EchoXml, тогда действительный URL-адрес, который вы запрашиваете, - http://your.server.com/EchoXmlhttp://your.server.com/EchoXml. Как вы видите, это не работает.

Исправьте свой базовый URL и путь, чтобы быть чем-то более подходящим. Поскольку вы не указали, к какому URL-адресу вы пытаетесь получить доступ, трудно дать гораздо больше деталей. Может быть, server должен быть базовым URL, а EchoXml - путь?

+0

Я рассмотрю это, но хотя это неверно, я не думаю, что URL-адрес неверен - этот код работает нормально, если свойство на элементе данных не задано с данными. Я проверил это, как свою службу WCF, и я могу ударить по своим точкам останова. Просто добавление данных к этому свойству нарушает его. – Nicros

+0

Ах, извините, я пропустил предложение, в котором вы сказали «если я оставлю закодированную строку пустой на объекте, все будет работать нормально». –

Смежные вопросы