2011-04-10 41 views
0

我有一个iPhone模拟器应用程序作为客户端和WCF-REST,json编码服务在IIS 7.0服务器上运行。 我试图发送一些希伯来字符作为参数的服务和服务器返回错误代码400 - 错误的请求。 当我发送一个英文字符串时,服务器按照它应该处理的字符串。希伯来语作为服务器端的垃圾信息

该代码用于字符串编码看起来像这样:

注意,“参数”是将要被发送到服务器,排序为PARAMETER_NAME => PARAMETER_VALUE的参数。

//RPC JSON 
NSString* reqString = [parameters JSONRepresentation]; 
//Request 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url]; 
NSData* requestData = [NSData dataWithBytes:[reqString UTF8String] length:[reqString length]]; 
//prepare http body 
[request setHTTPMethod: @"POST"]; 
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody: requestData]; 
urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 

请求和响应我(用空灵得到这个)获得在服务器端:

请求:

POST /SmsliMobileService.svc/SetContactGroups HTTP/1.1 
Host: 192.168.10.22:8081 
User-Agent: Beeper_3/1.0 CFNetwork/485.12.7 Darwin/10.7.0 
Content-Length: 89 
Accept: application/json 
Content-Type: application/json; charset=UTF-8 
Accept-Language: en-us 
Accept-Encoding: gzip, deflate 
Connection: keep-alive 

响应:

{"ApplicationID":"98534bb6-82ef-4937-83e7-10f65780bf36","contact_id":43,"groups":"עבו×HTTP/1.1 400 Bad Request 
Content-Length: 1647 
Content-Type: text/html 
Server: Microsoft-IIS/7.5 
X-Powered-By: ASP.NET 
Date: Sun, 10 Apr 2011 07:46:09 GMT 

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>Request Error</title> 
    <style>BODY { color: #000000; background-color: white; font-family: Verdana; margin- left: 0px; margin-top: 0px; } #content { margin-left: 30px; font-size: .70em; padding- bottom: 2em; } A:link { color: #336699; font-weight: bold; text-decoration: underline; }  A:visited { color: #6699cc; font-weight: bold; text-decoration: underline; } A:active {  color: #336699; font-weight: bold; text-decoration: underline; } .heading1 { background- color: #003366; border-bottom: #336699 6px solid; color: #ffffff; font-family: Tahoma; font- size: 26px; font-weight: normal;margin: 0em 0em 10px -20px; padding-bottom: 8px; padding- left: 30px;padding-top: 16px;} pre { font-size:small; background-color: #e5e5cc; padding:  5px; font-family: Courier New; margin-top: 0px; border: 1px #f0f0e0 solid; white-space: pre- wrap; white-space: -pre-wrap; word-wrap: break-word; } table { border-collapse: collapse;  border-spacing: 0px; font-family: Verdana;} table th { border-right: 2px white solid;  border-bottom: 2px white solid; font-weight: bold; background-color: #cecf9c;} table td {  border-right: 2px white solid; border-bottom: 2px white solid; background-color: #e5e5cc;} </style> 
    </head> 
    <body> 
    <div id="content"> 
     <p class="heading1">Request Error</p> 
     <p>The server encountered an error processing the request. See server logs for  more details.</p> 
    </div> 
    </body> 
</html> 

任何帮助将不胜感激。

+0

这看起来像一个服务器端的问题给我。该错误可能是由服务器程序中的任何异常引发的。在服务器上启用调试模式,以便您可以在响应中看到完整的异常,或者查看日志,以查看错误是什么。 – 2011-04-10 09:00:23

+0

我已经发布了原始请求和响应。这不是我们能得到的最好的调试吗? – ofirbt 2011-04-10 09:27:59

回答

0

我在发布的代码上有错误。

NSData* requestData = [NSData dataWithBytes:[reqString UTF8String] length:[reqString length]]; 

这条线(原是在问题的代码)生成的错误 - 而不是采取阵列从返回的字节的长度:“[reqString UTF8字符串]”,一个错误的长度被给 - 长度的NSString的...

固定代码:

const char *utf8String = [reqString UTF8String]; // no need to free me - autoreleased object returned. 
NSInteger l = strlen(utf8String); 
NSData *requestData = [NSData dataWithBytes:utf8String length:l];