2010-12-23 8 views
0

Ich versuche, auf Daten von Webdiensten zuzugreifen, die für das Projekt erstellt wurden, an dem ich gearbeitet habe. Ich bin eine Zeichenfolge Erstellen einer AnfrageNSURLConnection sendSynchronousRequest dauert zu lange, um zu antworten

NSMutableString *sRequest = [[NSMutableString alloc] init]; 
[sRequest appendString:@"<soapenv:Envelope xmlns:soapenv=\"http:blah blah blah /messages\">"]; 
[sRequest appendString:@"<soapenv:Header/>"]; 
[sRequest appendString:@"<soapenv:Body>"]; 
[sRequest appendString:@"<mes:processActionRequest>"]; 
[sRequest appendString:@"<ProcessAction>"]; 
[sRequest appendString:@"</mes:processActionRequest>"]; 
[sRequest appendString:@"</soapenv:Body>"]; 
[sRequest appendString:@"</soapenv:Envelope>"]; 
erstellen

Dann habe ich eine URL bin die Schaffung und fordern

NSURL *ServiceURL = [NSURL URLWithString:[[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"webservices" ofType:@"plist"]] valueForKey:@"EndPointURL"]]; 



NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:ServiceURL]; 

[request addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"]; 



[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:[sRequest dataUsingEncoding:NSUTF8StringEncoding]]; 

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 

NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate]; 

NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:NULL error:NULL]; 

NSTimeInterval duration = [NSDate timeIntervalSinceReferenceDate] - start; 
NSLog(@"Response Time%.4f",duration); 

[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 


return responseData; 

Das Problem ist, die Reaktionszeit, die ich in Log gedruckt kommt immer über 20 Sekunden zu sein irgendwie. Aber wenn ich den gleichen Link mit dem eviware/SoapUI-Projekt anklicke, wird es innerhalb einer Sekunde ausgeführt, auch wenn der gleiche Link im Blackberry-Projekt verwendet wird, funktioniert es reibungslos. Ich verstehe nicht, wo ich falsch liege. Warum ist die Antwort nur für das iPhone sehr langsam? Bitte helfen Sie. Wenn ich nicht klar bin, lass es mich wissen. Ich werde versuchen, mehr zu erarbeiten.

Antwort

1

Wenn Sie den Code nicht bereits aus einem Hintergrundthread ausführen, sollten Sie die asynchronen Aufrufe von NSURLConnection besser verwenden.

Sehen Sie das gleiche Problem mit der asynchronen API?

+0

Ich habe versucht, Asynchronous API zu verwenden. Es zeigt die gleiche verzögerte Antwort. – jason

3

Es gab ein neues Zeilenzeichen am Ende der URL, das das Problem verursachte. Danke für die Unterstützung Andrew.