1

Hii все, с чем я столкнулся с странной проблемой при работе с веб-службами wcf json. Тот же веб-сервис, когда вызывается из android, возвращает действительный JSON, но когда я вызов из iOS я получаю null и только null, я пробовал полностью, но могу не ошибиться.Неверный ответ Json при вызове веб-службы WCF

NSString *urlStringRequest = [NSString stringWithFormat:@"%@%@",urlPath,parameterName]; //its my URL to connect to web server. 

     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStringRequest]]; 
     [request setHTTPMethod:@"POST"]; 
     [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 

     NSError *error = nil; 
     NSURLResponse *response = nil; 
     NSData *result = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

     NSArray *jsonArrayOne = [self parseJsonResult:result]; 

     NSLog(@"Json Resul: %@", jsonArrayOne); 

Функция parseJsonResult выглядит следующим образом

 - (id)parseJsonResult:(NSData *)result 
    { 
     if(! result) 
      return nil; 
     NSError *error = nil; 


     jsonArray = [NSJSONSerialization JSONObjectWithData: result options: NSJSONReadingMutableContainers error: &error]; 

     if (!jsonArray) { 
      NSLog(@"Error parsing JSON: %@", error); 
     } else { 
      for(NSDictionary *item in jsonArray) { 
       NSLog(@"Item: %@", item); 
      } 
     } 
     return jsonArray; 
} 

URL-адрес, как

http://xxx/xxx/xxx.svc/login?parameter={\"username\":\"abc.xyz\",\"password\":\"Password123\"} 

и называя это ФОС веб-сервисом от андроида возвращает правильный ответ JSON, но звонит из прошивки возвращая нуль. где я ошибся, пожалуйста, помогите мне.

+0

Требуется ли для вашего сервера в заголовке 'User-Agent' заголовок? Также распечатайте 'error' после завершения запроса, чтобы проверить, доступна ли какая-либо информация об ошибке. – Amar

+0

Попробуйте зарегистрировать результат NSData * – HAS

+1

NSLog ошибка в случае, если возвращаемый результат равен нулю. Это может дать нам подсказку. Не используйте синхронные удобные методы, используйте NSURLConnection в асинхронном режиме, которые реализуют методы делегата. – CouchDeveloper

ответ

0

Попробуйте этот код и когда вы получите правильный JSon, то с & р ваш JSON в jsonformatter block затем нажмите на кнопку продолжить

-(void)yourMethod 
{ 
    NSString *urlStringRequest = [NSString stringWithFormat:@"%@%@",urlPath,parameterName]; //its my URL to connect to web server. 

     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStringRequest] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]; 
     [request setHTTPMethod:@"POST"]; 

     NSString *stringBoundary = @"0xKhTmLbOuNdArY---This_Is_ThE_BoUnDaRyy---pqo"; 
     NSString *headerBoundary = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary]; 

     [request addValue:headerBoundary forHTTPHeaderField:@"Content-Type"]; 

     NSMutableData *postBody = [NSMutableData data]; 

     // media part 
     [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

     [postBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

     [request setHTTPBody:postBody]; 

     NSHTTPURLResponse* response =[[NSHTTPURLResponse alloc] init]; 
     NSError* error = [[NSError alloc] init] ; 

     //synchronous filling of data from HTTP POST response 
     NSData *responseData = [NSURLConnection sendSynchronousRequest:dataRqst returningResponse:&response error:&error]; 

     //convert data into string 
     NSString *responseString = [[NSString alloc] initWithBytes:[responseData bytes] length:[responseData length] encoding:NSUTF8StringEncoding]; 

     NSLog(@"responseString %@ ",responseString); 

    if (!error) { 
     NSLog(@"Error parsing JSON: %@", error); 
    } else { 
     if([[[[responseString objectForKey:@"LoginResult"] objectForKey:@"result"] objectForKey:@"success"] isEqualToString:@"1"];) 
     { 
      jsonArray= [[[[responseString objectForKey:@"LoginResult"] objectForKey:@"result"] objectForKey:@"success"] objectForKey:@"data"]; 
      NSLog(@"jsonArray : %@",jsonArray); 
     } 
    } 
    return jsonArray; 
} 

Я надеюсь, что это поможет вам ...!

+0

Зачем вам нужно добавлять файлы 'SBJson', если вы используете' NSJSONSerialization'? ;) – HAS

+0

Привет iShwar, Посмотрите мой обновленный код. Пожалуйста, дайте мне знать, если возникнет какая-либо проблема. Спасибо – chandan

+0

Извините, но я не понимаю, как этот код может быть полезен. – CouchDeveloper

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