Публикация сериализованного объекта с ошибкой AFNetworking

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

Я пытаюсь опубликовать это в своем сервисе 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];
}

Изменить: Извините, форматирование стало шатким, когда я вставил его в...

2 ответа

Решение

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

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

Важные части вашего кода:

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базовый URL, с указанным path добавлен к нему.

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

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

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

Другие вопросы по тегам