NSURLConnection在服务器上发送两次数据

时间:2013-08-27 07:04:56

标签: iphone ios nsurlconnection

我正在创建一个iPhone应用程序,我需要将数据发送到服务器。使用NSURLConnection我能够发送数据但我的数据发送两次。我只得到一次回应。 任何人都可以建议为什么会发生这种情况

这是我的代码

 NSURL *url=[NSURL URLWithString:[APIServiceURL geturl]];
        NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:url];
        NSString *msgLength=[NSString stringWithFormat:@"%d",[soapMsg1 length]];
        [req addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
        [req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
        [req addValue:@"http://tempuri.org/InsertPostComment" forHTTPHeaderField:@"SOAPAction"];
        [req setHTTPMethod:@"POST"];
        [req setHTTPBody:[soapMsg1 dataUsingEncoding:NSUTF8StringEncoding]];

        // Response
        NSHTTPURLResponse *urlResponse=nil;
        NSError *error;
        connection =nil;
        connection=[[NSURLConnection alloc]initWithRequest:req delegate:self];
        NSData  *responseData;
        ;

        if (connection)
        {
            responseData=[NSURLConnection sendSynchronousRequest:req returningResponse:&urlResponse error:&error];
        }
        else
        {
            NSLog(@"not connected to server");
        }

        if ([responseData length]>0)
        {

            NSString *responseString=[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];
            NSLog(@"responseString %@",responseString);
            responseString =nil;}

由于

2 个答案:

答案 0 :(得分:2)

使用您的代码2发出请求。

创建NSURLConnection时会发送第一个。 [[NSURLConnection alloc] initWitRequest: delegate:]创建连接并异步启动请求,将数据发送回您指定的委托。

,第二个是在你致电

时拍的
[NSURLConnection sendSynchronousRequest:req returningResponse:&urlResponse error:&error];

如果要对端点进行同步调用:

NSData  *responseData;
responseData=[NSURLConnection sendSynchronousRequest:req returningResponse:&urlResponse error:&error];

if (!error)
{
    // Do your stuff with the response data
}
else
{
    NSLog(@"not connected to server with error %@", error.debugDescription);
}

对URLConnection的一个很好的解读:Apple Reference

答案 1 :(得分:0)

使用NSUrlConnection委托取回两个响应。当且仅当您的服务器针对您发布的日期发送2个响应时,U才能获得2个响应。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSString *response = [[NSString alloc] initWithBytes:[data bytes] length:[data length]
                                                     encoding:NSUTF8StringEncoding];
}

它应该有用。