Webservice iPhone

时间:2010-08-20 08:36:46

标签: iphone web-services

我正在尝试从我的iPhone应用程序访问web服务(用.NET编写)。

这是我的代码:

-(IBAction)buttonClicked:(id)sender {

    NSString *postString =[NSString stringWithFormat:question];
    NSLog(postString);

    NSURL *url = [NSURL URLWithString: address+@"/execute"];
    NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
    NSString *msgLength = [NSString stringWithFormat:@"%d", [postString length]];

    [req addValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

    [req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
    [req setHTTPMethod:@"POST"];
    [req setHTTPBody: [postString dataUsingEncoding:NSUTF8StringEncoding]];

    [activityIndicator startAnimating];

    conn = [[NSURLConnection alloc] initWithRequest:req delegate:self];
    if (conn) {
        webData = [[NSMutableData data] retain];
    }


}

-(void) connection:(NSURLConnection *) connection
didReceiveResponse:(NSURLResponse *) response {
    [webData setLength: 0];
}

-(void) connection:(NSURLConnection *) connection
    didReceiveData:(NSData *) data {
    [webData appendData:data];
}
-(void) connection:(NSURLConnection *) connection
  didFailWithError:(NSError *) error {
    [webData release];
    [connection release];
}

-(void) connectionDidFinishLoading:(NSURLConnection *) connection {
    NSLog(@"DONE. Received Bytes: %d", [webData length]);
    NSString *theXML = [[NSString alloc]
                        initWithBytes: [webData mutableBytes]
                        length:[webData length]
                        encoding:NSUTF8StringEncoding];
    //---shows the XML---
    NSLog(theXML);
    [theXML release];
    [activityIndicator stopAnimating];
    if (xmlParser)
    {
        [xmlParser release];
    }
    xmlParser = [[NSXMLParser alloc] initWithData: webData];
    [xmlParser setDelegate: self];
    [xmlParser setShouldResolveExternalEntities:YES];
    [xmlParser parse];

    [connection release];
    [webData release];
}

它正在输入didReceiveResponse和didReceiveData方法但是检索了以下文本而不是我想要的数据:

  
    

                     运行时错误                           body {font-family:“Verdana”; font-weight:normal; font-size:     .7em;颜色:黑色;}              p {font-family:“Verdana”; font-weight:normal; color:black; margin-top:-5px}              b {font-family:“Verdana”; font-weight:bold; color:black; margin-top:     -5px}              H1 {font-family:“Verdana”; font-weight:normal; font-size:18pt; color:red     }              H2 {font-family:“Verdana”; font-weight:normal; font-size:14pt; color:maroon     }              pre {font-family:“Lucida Console”; font-size:.9em}              .marker {font-weight:bold; color:black; text-decoration:none;}              .version {color:grey;}              .error {margin-bottom:10px;}              .expandable {text-decoration:underline;     字体重量:粗体;颜色:海军;     光标:手; }                      

  
<body bgcolor="white">

        <span><H1>Server Error in '/' Application.<hr
     

宽度= 100initWithBytes:长度:编码:IZE = 1   颜色=银&GT;

        <h2> <i>Runtime Error</i> </h2></span>

        <font face="Arial, Helvetica, Geneva, SunSans-Regular,
     

sans-serif“&gt;

        <b> Description: </b>An application error occurred on the
     

服务器。当前的自定义错误   此应用程序的设置阻止   应用程序错误的详细信息   远程观看(for   安全原因)。但是,它可以   被浏览器上运行的浏览器查看   本地服务器机器。               

        <b>Details:</b> To enable the details of this specific error
     

消息可在远程查看   机器,请创建一个   &LT;&的customErrors GT;标签内的   “web.config”配置   文件位于根目录下   当前的Web应用程序。这个   &LT;&的customErrors GT;然后标签应该   有它的“模式”属性   设为“关”。

        <table width=100 gcolor="#ffffcc">
           <tr>
              <td>
                  <code><pre>
     

&lt;! - Web.Config配置文件    - &GT;

     

&LT;结构&gt;       &LT;&的System.Web GT;           &lt; customErrors mode =“Off”/&gt;       &LT; /system.web> &LT; /结构&gt;

              </td>
           </tr>
        </table>

        <br>

        <b>Notes:</b> The current error page you are seeing can be
     

由自定义错误页面替换   修改   “defaultRedirect”属性   应用程序的   &LT;&的customErrors GT;配置标签   指向自定义错误页面   URL。

        <table width=100 gcolor="#ffffcc">
           <tr>
              <td>
                  <code><pre>
     

&lt;! - Web.Config配置文件    - &GT;

     

&LT;结构&gt;       &LT;&的System.Web GT;           &lt; customErrors mode =“RemoteOnly”   的defaultRedirect = “mycustompage.htm”/&GT;       &LT; /system.web> &LT; /结构&gt;

              </td>
           </tr>
        </table>

        <br>

</body> </html>

有人可以帮助我吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您收到服务器端错误。检查您从iPhone应用程序发送到Web服务的请求参数。

答案 1 :(得分:0)

实际邮件长度与“Content-Length”标题中设置的长度之间可能存在冲突。

一个是通过获取字符串的长度来设置的,另一个是通过使用UTF8编码获取数据来设置的。