2012-04-25 74 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]; 
相關問題