2012-04-25 42 views
0

我是新来的堆栈溢出。我通过我的iPhone应用程序在Web服务连接上工作,我对iPhone开发非常陌生,所以我尝试了一个示例通过下面的链接,如何将iPhone应用程序连接到asmx soap webservice

http://www.leesilver.net/1/post/2011/08/calling-a-web-service-from-objective-c.html 

但我得到一个下面的错误,"property 'data' not found on object of type 'AppDelegate'" 在该行的NSString *查询= AppDelegate.data;

下面是我的全部代码,

-(IBAction)btnDone:(id)sender{ 

    recordResults = FALSE; 
    NSString *query = AppDelegate.data; // Getting the error at this line 
             //property 'data' not found on object of type 'AppDelegate'   
    query = [query stringByReplacingOccurrencesOfString:@"<" withString:@"&lt;"]; 
    query = [query stringByReplacingOccurrencesOfString:@">" withString:@"&gt;"]; 

    NSString *soapMessage = [NSString stringWithFormat: 
          @"<?xml version=\"1.0\" encoding=\"utf-8\"?>" 
          "<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/\">" 
          "<soap:Body>\n" 
          "<HelloWorld xmlns=\"http://tempuri.org/\">\n" 
          "<xmlIn>\n" 
          "<![CDATA[%@]]>\n" 
          "</xmlIn>\n" 
          "</HelloWorld>\n" 
          "</soap:Body>\n" 
          "</soap:Envelope>\n", query ]; 

    NSLog(@"%@",soapMessage); 
    NSURL *url = [NSURL URLWithString:@"http://www.xxxxxxx.net/service.asmx"]; 
    NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; 
    NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMessage length]]; 
    [theRequest addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"]; 
    [theRequest addValue:@"http://www.xxxxxxxxxxx.net/service.asmx?op=HelloWorld" forHTTPHeaderField:@"SOAPAction"]; 
    [theRequest addValue:msgLength forHTTPHeaderField:@"Content-Type"]; 
    [theRequest setHTTPMethod:@"POST"]; 
    [theRequest setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]]; 
    NSLog(@"Message Length..%@",msgLength); 

    NSURLConnection *theConnection = [[NSURLConnection alloc]initWithRequest:theRequest delegate:self]; 

    if(theConnection) 
    { 
     conWebData = [NSMutableData data]; 
    } 
    else 
    { 
     NSLog(@"theConnection is NULL"); 
    } 

} 

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [conWebData setLength:0]; 
} 
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"ERROR with theConnection"); 
} 
-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"DONE. Received Bytes:%d",[conWebData length]); 
    NSString *theXML = [[NSString alloc]initWithBytes:[conWebData mutableBytes] length:[conWebData length] encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@",theXML); 

    xmlParser = [[NSXMLParser alloc]initWithData:conWebData]; 
    [xmlParser setDelegate:self]; 
    [xmlParser setShouldResolveExternalEntities:YES]; 
    [xmlParser parse]; 
} 

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict 
{ 
    if([elementName isEqualToString:@"HelloWorldResult"]) 
    { 
     if(!soapResults) 
     { 
      soapResults = [[NSMutableString alloc]init]; 
     } 
     recordResults = TRUE; 
    } 
} 

-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string 
{ 
    if(recordResults) 
    { 
     [soapResults appendString:string]; 
    } 
} 

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName 
{ 
    if([elementName isEqualToString:@"HelloWorldResult"]) 
    { 
     recordResults = FALSE; 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:soapResults delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
     soapResults = nil; 
    } 
} 

对此的任何帮助表示赞赏。 在此先感谢。

+0

使用REST,代码少并且速度更快 – 2012-04-25 06:33:35

+0

@Alex:我欣赏你的观点,我试图找到示例REST代码,我无法清楚地理解任何内容,如果你有任何好的资源或URL友善分享。 – ituner 2012-04-25 06:39:05

+0

您的服务器必须实施休息协议。并且还要求不是xml的json响应 – 2012-04-25 06:44:24

回答

0

消息长度的头是“Content-Length”,而不是“Content-Type”,因此请尝试: [theRequest addValue:msgLength forHTTPHeaderField:@“Content-Length”]; 而不是 [theRequest addValue:msgLength forHTTPHeaderField:@“Content-Type”]; 对于REST Web服务应用服务器必须返回作为消息响应XML或JSON看到我的“web服务”的应用程序的例子...

0

您好我创立了一个工具,它为我工作很好,http://www.wsdl2code.com

SampleServiceProxy *proxy = [[SampleServiceProxy alloc]initWithUrl:@"YOUR 
      URL" AndDelegate:self]; 

    [proxy GetDouble]; 
    [proxy GetEnum]; 
    [proxy getEnum:kTestEnumTestEnum2]; 
    [proxy GetInt16]; 
    [proxy GetInt32]; 
    [proxy GetInt64]; 
    [proxy GetString]; 
    [proxy getListStrings]; 
相关问题