AFNetworking 2.0 Domain = AFNetworkingErrorDomain Code = -1011 "Solicitud fallida: error del server interno (500)

Estoy tratando de convertir mi código a AFNetworking 2.0 con sub class AFHTTPRequestOperationManager. Aquí está mi código

+ (NSAFNetwokingRequestManager *)shanetworkingClient { static NSAFNetwokingRequestManager *_shanetworkingClient = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _shanetworkingClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:GET_CAR_BRAND]]; }); return _shanetworkingClient; } - (instancetype)initWithBaseURL:(NSURL *)url { self = [super initWithBaseURL:url]; if (self) { self.responseSerializer = [AFXMLParserResponseSerializer serializer]; self.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/soap+xml"]; self.requestSerializer = [AFHTTPRequestSerializer serializer]; [self.requestSerializer setValue:@"application/soap+xml" forHTTPHeaderField:@"Content-type"]; } return self; } - (void)requestBrandcompletion:(NSAFNetwokingRequestManagerCompletionBlock)completion { NSString *soapRequest=@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n" "<soap:Body>\n" " <CarBrandExt xmlns=\"http://www.nohausystems.nl/\" />\n" "</soap:Body>\n" "</soap:Envelope>\n"; NSString *msgLength = [NSString stringWithFormat:@"%i",[soapRequest length]]; [self POST:GET_CAR_BRAND parameters:Nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"text/xml; charset=utf-8", @"Content-Type", msgLength, @"Content-Length", nil] body:[soapRequest dataUsingEncoding:NSUTF8StringEncoding]]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { if (completion) { completion(YES, responseObject); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if (completion) { completion(NO, nil); NSLog(@"Unable to fetch record error %@ with user info %@.", error, error.userInfo); } }]; } 

Estoy recibiendo este error Domain = AFNetworkingErrorDomain Code = -1011 "Solicitud falló: error del server interno (500). ¿Alguien puede decirme qué estoy haciendo mal aquí? Obteniendo esta respuesta:

 { status code: 500, headers { "Cache-Control" = private; "Content-Length" = 509; "Content-Type" = "application/soap+xml; charset=utf-8"; Date = "Thu, 13 Mar 2014 12:59:45 GMT"; Server = "Microsoft-IIS/7.5"; "X-AspNet-Version" = "2.0.50727"; "X-Powenetworking-By" = "ASP.NET"; } } 

En tu código tienes:

 [self POST:GET_CAR_BRAND parameters:Nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"text/xml; charset=utf-8", @"Content-Type", msgLength, @"Content-Length", nil] body:[soapRequest dataUsingEncoding:NSUTF8StringEncoding]]; 

que define el tipo de contenido como "text / xml", mientras que el server claramente espera "application / soap + xml". Debe intentar cambiar esa parte del código para:

 [self POST:GET_CAR_BRAND parameters:Nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithHeaders:[NSDictionary dictionaryWithObjectsAndKeys:@"application/sopa+xml; charset=utf-8", @"Content-Type", msgLength, @"Content-Length", nil] body:[soapRequest dataUsingEncoding:NSUTF8StringEncoding]]; 

Sugerencias actualizadas:

Intente agregar:

 [self.requestSerializer setValue:@"application/soap+xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; 

al final de su - (instancetype)initWithBaseURL:(NSURL *)url method.

Si esto no ayuda, sugeriría hacer una debugging de request de networking más detallada. Por ejemplo, puede configurar AFNetworkActivityLogger para registrar la información de request / respuesta en la console.

Solo un pensamiento, cuidado mientras usa BASEURL con AFNetworking . Si está suministrando la URL exacta del punto final a AFNetworking , podría fallar.

Por ejemplo:

Tienes una URL = http://myweb.com/api.php punto final URL = http://myweb.com/api.php

En el caso anterior, si está utilizando AFNetworking , la BASEURL != URL mientras que debe ser algo así como BASEURL=http://myweb.com/ y mientras se solicita cualquier URL = api.php suministro de request URL = api.php . AFNetworking anexa la URL de BASEURL + y crea una url de punto final completa.

Aunque la respuesta anterior puede no ser correcta para su caso. Pero en caso de que ayude a domar otro problema, o también en su caso.

Gracias.

El error "Solicitud fallida: tipo de contenido inaceptable: aplicación / soap + xml" es generado por

 - (BOOL)validateResponse:(NSHTTPURLResponse *)response data:(NSData *)data error:(NSError * __autoreleasing *)error 

método de AFHTTPResponseSerializer en caso de tipo de respuesta MIME no esperable.

Puedes solucionarlo con el siguiente código

 self.responseSerializer = [AFXMLParserResponseSerializer serializer]; NSSet *set = self.responseSerializer.acceptableContentTypes; self.responseSerializer.acceptableContentTypes = [set setByAddingObject:@"application/soap+xml"]; 

o modificando AFXMLDocumentResponseSerializer – agregue "application / soap + xml" a types de contenido aceptables:

 - (instancetype)init { self = [super init]; if (!self) { return nil; } self.acceptableContentTypes = [[NSSet alloc] initWithObjects:@"application/xml", @"text/xml", @"application/soap+xml", nil]; return self; } 

Los siguientes no resolverán este problema. Creo que

 [self.requestSerializer setValue:@"application/soap+xml" forHTTPHeaderField:@"Content-type"]; 

No hay suficiente información para entender por qué tiene "" Solicitud falló: error del server interno (500) ". Yo publicará las requestes correctas e incorrectas, intentaremos ayudarlo.

Pruebe este código:

 [self.requestSerializer setValue:@"application/soap+xml" forHTTPHeaderField:@"Accept"];