Ответ SOAP XML вызывает проблемы в iPhone - PullRequest
1 голос
/ 14 марта 2012

Теперь я использовал веб-сервис SOAP в своем приложении, и я не получаю правильные результаты XML-ответа от сервера, но тот же веб-сервис работает нормально на стороне Android, и они получают правильный SOAP-XML-ответ. Но это не работает на стороне iPhone. Так что я не знаю, с какой стороны возникла проблема, на стороне сервера или на стороне клиента (только на стороне iPhone). Я пробовал ASHTTPRequest также, я получаю те же результаты.

это пример кода для вызова веб-службы с использованием соединения NSURL,

   NSString *soapMessage = [NSString stringWithFormat:
                             @"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
                            @"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n"
                             @"<soap:Body>\n"
                             @"<ViewMemberShipPackagesResponse xmlns=\"http://tempuri.org/\">\n"
                             @"</ViewMemberShipPackagesResponse>\n"
                             @"</soap:Body>\n"
                             @"</soap:Envelope>\n"];


    NSString* urlString=[NSString stringWithFormat:@"http://aaaaa.com/aaaaaa.asmx"];
    NSURL *url = [NSURL URLWithString:urlString];

    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url];
     NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
    [theRequest addValue: @"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [theRequest addValue:@"http://tempuri.org/ViewMemberShipPackagesResponse" forHTTPHeaderField:@"SOAPAction"];
    [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"];
    [theRequest setHTTPMethod:@"POST"];
    [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];
     NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if( theConnection )
    {
        receiveData = [[NSMutableData data] retain];
    }

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    NSLog(@"didReceiveResponse");
    [receiveData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {   
    NSLog(@"didReceiveData");
    [receiveData appendData:data];  
}   

-(void)connectionDidFinishLoading:(NSURLConnection *)connection {

    NSString *urlDataString = [[NSString alloc] initWithData:receiveData encoding:NSASCIIStringEncoding];
    NSLog(@"the  urlDataString is %@", urlDataString);
}

Но я не получаю правильный ответ мыла XML от сервера. Этот пример выходного ответа от сервера,

   <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><ViewMembershipPackagesResponse xmlns="http://tempuri.org/"><ViewMembershipPackagesResult xsi:type="xsd:string">

&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;&lt;soap:Body&gt;&lt;ViewMemberShipPackagesResponse xmlns="http://tempuri.org/"&gt;&lt;ViewMemberShipPackagesResult&gt;6&lt;/ViewMemberShipPackagesResult&gt;&lt;Package&gt;&lt;ID&gt;5&lt;/ID&gt;&lt;Name&gt;1 Month Package&lt;/Name&gt;&lt;DateSpan&gt;1 Month&lt;/DateSpan&gt;&lt;Price&gt;$29.99&lt;/Price&gt;&lt;Description&gt;Test&lt;/Description&gt;&lt;/Package&gt;&lt;Package&gt;&lt;ID&gt;6&lt;/ID&gt;&lt;Name&gt;1 Month Package with Multiple Locations&lt;/Name&gt;&lt;DateSpan&gt;1 Month&lt;/DateSpan&gt;&lt;Price&gt;$89.99&lt;/Price&gt;&lt;Description&gt;This pacakge to have&lt;/Description&gt;&lt;

/Package&gt;&lt;Package&gt;&lt;ID&gt;7&lt;/ID&gt;&lt;Name&gt;12 Month Test Package&lt;/Name&gt;&lt;DateSpan&gt;12 Months&lt;/DateSpan&gt;&lt;Price&gt;$360.00&lt;/Price&gt;&lt;Description&gt;12 Month Package&lt;/Description&gt;&lt;/Package&gt;&lt;Package&gt;&lt;ID&gt;4&lt;/ID&gt;&lt;Name&gt;Andy Test Package&lt;/Name&gt;&lt;DateSpan&gt;12 Months&lt;/DateSpan&gt;&lt;Price&gt;$49.99&lt;/Price&gt;&lt;Description&gt;Test package for a year&lt;/Description&gt;&lt;/Package&gt;&lt;Package&gt;&lt;ID&gt;2&lt;/ID&gt;&lt;Name&gt;Golden Package&lt;/Name&gt;&lt;DateSpan&gt;6 Months&lt;/DateSpan&gt;&lt;Price&gt;$80.00&lt;/Price&gt;&lt;Description&gt;There are many variations of passages of Lorem Ipsum available, but the majority have suffered&lt;/Description&gt;&lt;/Package&gt;&lt;Package&gt;&lt;ID&gt;1&lt;/ID&gt;&lt;Name&gt;Premium Package&lt;/Name&gt;&lt;DateSpan&gt;12 Months&lt;/DateSpan&gt;&lt;Price&gt;$120.00&lt;/Price&gt;&lt;Description&gt;It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.&lt;/Description&gt;&lt;/Package&gt;&lt;/ViewMemberShipPackagesResponse&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</ViewMembershipPackagesResult></ViewMembershipPackagesResponse>  </soap:Body></soap:Envelope>.

Пожалуйста, ведите меня.

спасибо!

1 Ответ

1 голос
/ 14 марта 2012

изменить это:

 -(void)connectionDidFinishLoading:(NSURLConnection *)connection {

      NSString * urlDataString = [[NSString alloc] initWithBytes: [receiveData mutableBytes] length:[receiveData length] encoding:NSUTF8StringEncoding];
      NSLog(@"the  urlDataString is %@", urlDataString);
}
...