NSURLConnection Delegate-Methoden nicht aufgerufen werden...es kann nicht herausfinden und lese viele Beiträge
Habe ich eine Klasse namens BackendConnector
was nutzt eine NSURLConnection
zu nennen, ein SoapWebservice
ist https. Ich fand eine Menge von stellen und versucht zu implementieren, die delegate-Methoden zur Authentifizierung, aber Sie werden nicht genannt und nach 6 Stunden in google, die ich nicht bekomme, was ich falsch gemacht habe. Kann bitte jemand mir einen Tipp geben, warum diese 2 Delegate-Methoden nicht aufgerufen werden? Ich setze einen Haltepunkt in jede eins, begann meine app mit XCode in den simulator, aber immer noch den Fehler und die Haltepunkte nicht getroffen zu werden.
BackendConnector.m
#import "BackendConnector.h"
@implementation BackendConnector
@synthesize dataPoint, chartDataPoints;
- (NSMutableArray *)GetWebserviceData
{
NSMutableData *myMutableData;
chartDataPoints = [[NSMutableArray alloc] init];
[self createWebserviceAndGetResponse: &myMutableData];
if (myMutableData != NULL)
{
NSString *theXml = [[NSString alloc]initWithBytes:[myMutableData mutableBytes] length:[myMutableData length] encoding:NSUTF8StringEncoding];
NSLog(@"doc = %@", theXml);
arrayCount = 0;
[self parseResponse: myMutableData];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"There is no Data returned from Webservice!"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles: nil];
[alert show];
[alert release];
}
return NULL;
//return chartDataPoints;
}
- (void) createWebserviceAndGetResponse: (NSMutableData **) myMutableData_p
{
NSMutableString *sRequest = [[NSMutableString alloc]init];
[sRequest appendString:@"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://service.ReportWebservice.xyz.com/\">"];
[sRequest appendString:@"<soapenv:Header/>"];
[sRequest appendString:@"<soapenv:Body>"];
[sRequest appendString:@"<ser:getReport>"];
[sRequest appendString:@"<arg0>User/arg0>"];
[sRequest appendString:@"<arg1>password</arg1>"];
[sRequest appendString:@"</ser:getReport>"];
[sRequest appendString:@"</soapenv:Body>"];
[sRequest appendString:@"</soapenv:Envelope>"];
NSURL *myWebserverURL = [NSURL URLWithString:@"https://xyz.com/services/report"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myWebserverURL];
NSLog(@"request: %@", request);
[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"" forHTTPHeaderField:@"SOAPAction"];
NSString *contentLengthStr = [NSString stringWithFormat:@"%d", [sRequest length]];
[request addValue:contentLengthStr forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[sRequest dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(conn)
{
*myMutableData_p=[[NSMutableData data] retain];
}
[NSURLConnection connectionWithRequest:request delegate:self];
NSError *WSerror;
NSURLResponse *WSresponse;
*myMutableData_p = [NSURLConnection sendSynchronousRequest:request returningResponse:&WSresponse error:&WSerror];
}
- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace {
return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust];
}
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
[challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge];
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
}
@end
Der Fehler ist:
Error Domain=NSURLErrorDomain Code=-1202 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “xyz.com” which could put your confidential information at risk." UserInfo=0x8161600 {NSErrorFailingURLStringKey=https://xyz.com/services/report, NSLocalizedRecoverySuggestion=Would you like to connect to the server anyway?, NSErrorFailingURLKey=https://xyz.com/services/report, NSLocalizedDescription=The certificate for this server is invalid. You might be connecting to a server that is pretending to be “xyz.com” which could put your confidential information at risk., NSUnderlyingError=0x8134cb0 "The certificate for this server is invalid. You might be connecting to a server that is pretending to be “xyz.com” which could put your confidential information at risk.", NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0x6d86020>}
Vielen Dank
twickl
InformationsquelleAutor CaptnCrash | 2010-11-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nicht in der Lage sein zu beantworten, warum diese Methoden nicht gefeuert, ich habe genau die gleichen Methoden, und Sie erhalten die aufgerufen wird, wenn über HTTPS, aber ich Frage mich, warum Sie nicht Umsetzung der rest der
NSURLConnection
delegate-Methoden? Wie-didReceiveResponse
etc.Ich denke auch, dass deine Verbindung tatsächlich löst bei
Sollte man nicht haben
[NSURLConnection connectionWithRequest:request delegate:self];
und schließlich sind Sie ab und der Einstellung anderer synchrone NSURLConnection und speichern Sie es in das, was sein sollteNSMutableData
.Versuchen nur mit Ihren ersten
NSUrlConnection *conn
(und sicher sein, zu release es richtig später) und dann setup Ihre Daten in die-didReceiveResponse
delegate-Methode, und man kann sogar festlegen, oder fügen Sie die Daten in die-didReceiveData
delegate-Methode.InformationsquelleAutor leukosaima
Spät, aber es kann nützlich sein, um andere
Link Lösung ist http://www.wim.me/nsurlconnection-in-its-own-thread/
InformationsquelleAutor Önder