2015-10-28 6 views
1

Я проверил несколько сообщений (this и this) в Stackoverflow, но ни один из них не ответил «Как использовать AFHTTPSessionManager для использования веб-службы на основе SOAP».AFHTTPSessionManager использовать службу на основе SOAP

Невозможно или нам нужно сделать некоторые настройки, такие как подклассы и т. Д.?

Я могу назвать SOAP на основе использования AFHTTPRequestOperation, но это то, что я не хочу использовать, так как у меня есть XML & JSON веб-службы там я использую AFHTTPSessionManager. Я хочу иметь похожий подход во всем приложении.

Мои коды с помощью RequestOperation является:

NSString *soapMessage = @"<?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" 
"<CelsiusToFahrenheit xmlns=\"http://tempuri.org/\">\n" 
"<Celsius>50</Celsius>\n" 
"</CelsiusToFahrenheit>\n" 
"</soap:Body>\n" 
"</soap:Envelope>n"; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://tempuri.org/"]]; 
[request setValue:@"text/xml" forHTTPHeaderField:@"Content-type"]; 
[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 

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

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"responseObject = %@", [operation responseString]); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"error = %@", error); 
}]; 

[operation start]; 

Я попытался с помощью SessionManager, но это не работает: (request такое же, как и в выше фрагменте кода), я получаю data, как nil и response имеет несколько значений , также имеет значение error.

AFHTTPSessionManager *sManager = [[AFHTTPSessionManager alloc] init]; 

[sManager dataTaskWithRequest:(NSURLRequest *)request 
      completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 

       NSLog(@"Data: %@", data); 
       NSLog(@"Resp: %@", response); 
       NSLog(@"Err: %@", error); 
}]; 
+0

проверить тип контента как [запрос SetValue: @ "приложение/мыло + XML; Charset = UTF-8" forHTTPHeaderField: @ "Content-Type"]; –

+0

@ Anbu.Karthik Вышеприведенный код работает, но использует 'RequestOpeation', я хочу достичь того же с помощью' SessionManager' класса 'AFNetworking'. –

+0

Нет старшего, я также пробовал более 1 часа, я тоже не получаю ответа –

ответ

1

Я пробовал несколько часов и, наконец, смог получить отклик и ошибку. Вот обновленный код:

NSString *soapMessage = @"<?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" 
"<CelsiusToFahrenheit xmlns=\"http://tempuri.org/\">\n" 
"<Celsius>50</Celsius>\n" 
"</CelsiusToFahrenheit>\n" 
"</soap:Body>\n" 
"</soap:Envelope>n"; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://tempuri.org/"]]; 
[request setValue:@"text/xml" forHTTPHeaderField:@"Content-type"]; 
[request setHTTPMethod:@"POST"]; 

[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 


AFHTTPSessionManager *sManager = [[AFHTTPSessionManager alloc] init]; 
sManager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

NSURLSessionDataTask *dataTask = [sManager dataTaskWithRequest:(NSURLRequest *)request 
      completionHandler:^(NSURLResponse *response, id responseObject, NSError *error){ 
       NSString *resString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; 
       NSLog(@"Data: %@", resString); 
       //NSLog(@"Resp: %@", [response ]); 
       NSLog(@"Err: %@", error); 
      }]; 
[dataTask resume];