调用 WCF Web 服务时出现错误的 Json 响应
Posted
技术标签:
【中文标题】调用 WCF Web 服务时出现错误的 Json 响应【英文标题】:Wrong Json response on calling the WCF web service 【发布时间】:2013-05-29 13:36:18 【问题描述】:大家好,我在处理 wcf json web 服务时遇到了一个奇怪的问题。从 android 调用相同的 web 服务时,它返回有效的 JSON,但是当我从 ios 调用时,我得到了 null只有null,我尽我所能尝试,但我没有弄错..我调用wcf Web服务的代码如下。
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;
网址是这样的
http://xxx/xxx/xxx.svc/login?parameter=\"username\":\"abc.xyz\",\"password\":\"Password123\"
并从 android 调用这个 wcf web-service 返回正确的 json 响应,但从 iOS 调用返回 null 。我哪里弄错了,请帮帮我。
【问题讨论】:
您的服务器是否需要在请求中设置User-Agent
标头?请求完成后还要打印error
,以检查是否有任何错误信息可用。
尝试记录你的 NSData *result
NSLog 错误以防返回结果为 nil。这可能会提示有关该问题的信息。不要使用同步的便捷方法,使用异步方式的NSURLConnection,即实现委托方法。
@CouchDeveloper :感谢您的技巧使 ma 工作它抛出了错误的 url 错误,我用 stringByAddingPercentEscapesUsingEncoding 对 url 进行了编码,我得到了输出但又是错误的 json,从 android 它给出了输出 "LoginResult": "\"result\":\"success\":\"1\",\"data\":\"userid\":\"33\"" 其中是有效的 JSON,但对我来说,响应就像.. LoginResult = "\"result\":\"success\":\"1\",\"data\":\"userid\": \"33\""; 这不是有效的 JOSN。
【参考方案1】:
试试这个代码,当你得到正确的 JSOn 然后 c & p 你的 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;
希望对你有帮助...!
【讨论】:
如果使用NSJSONSerialization
,为什么需要包含SBJson
文件? ;)
嗨 iShwar,看看我更新的代码。如果出现任何问题,请告诉我。谢谢
抱歉,我不明白尝试这段代码会有什么帮助。
@chandan:嗨,我没有收到错误 url 错误的 o/p 因为我通过使用 UTF-8 编码 url 解决了这个问题,但现在我得到了 o/p LoginResult = " \"结果\":\"成功\":\"1\",\"数据\":\"userid\":\"33\""; 这是错误的 JSON,从 android 调用的相同 Web 服务返回 "LoginResult": "\"result\":\"success\":\"1\",\"data\":\" userid\":\"33\"" 这是正确的o/p,而且,是的,我已经集成了您的代码而不是我的代码,所以我向您展示的输出是 NSLog(@"字典:%@",dictIs)。和 NSLog(@"dict : %@",jsonArray);给我null。
您好 iShwar,您的发送请求可能有误。所以根据更新的代码改一下以上是关于调用 WCF Web 服务时出现错误的 Json 响应的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 XHR 联系 WCF 服务时出现 400 错误请求