iPhone 呼叫Web Service 例子(轉)

weixin_34054866發表於2012-03-12

#import <UIKit/UIKit.h>

@interface Hello_SOAPViewController : UIViewController 
{
    IBOutlet UITextField 
*nameInput;
    IBOutlet UILabel 
*greeting;
    NSMutableData 
*webData;
    NSMutableString 
*soapResults;
    NSXMLParser 
*xmlParser;
    BOOL 
*recordResults;
}

@property(nonatomic, retain) IBOutlet UITextField 
*nameInput;
@property(nonatomic, retain) IBOutlet UILabel 
*greeting;
@property(nonatomic, retain) NSMutableData 
*webData;
@property(nonatomic, retain) NSMutableString 
*soapResults;
@property(nonatomic, retain) NSXMLParser 
*xmlParser;

-(IBAction)buttonClick: (id) sender;

@end

#import 
"Hello_SOAPViewController.h"

@implementation Hello_SOAPViewController

@synthesize greeting, nameInput, webData, soapResults, xmlParser;

-(IBAction)buttonClick:(id)sender
{
    recordResults 
= FALSE;
    
    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"
    
"<Hello xmlns=/"http://viium.com//">/n"
    
"<name>%@</name>/n"
    
"</Hello>/n"
    
"</soap:Body>/n"
    
"</soap:Envelope>/n", nameInput.text
    ];
    NSLog(soapMessage);
    
    NSURL 
*url = [NSURL URLWithString:@"http://viium.com/WebService/HelloWorld.asmx"];
    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://viium.com/Hello" 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 )
    {
        webData 
= [[NSMutableData data] retain];
    }
    
else
    {
        NSLog(
@"theConnection is NULL");
    }
    
    [nameInput resignFirstResponder];
    
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength: 
0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(
@"ERROR with theConenction");
    [connection release];
    [webData release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(
@"DONE. Received Bytes: %d", [webData length]);
    NSString 
*theXML = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];
    NSLog(theXML);
    [theXML release];
    
    
if( xmlParser )
    {
        [xmlParser release];
    }
    
    xmlParser 
= [[NSXMLParser alloc] initWithData: webData];
    [xmlParser setDelegate: self];
    [xmlParser setShouldResolveExternalEntities: YES];
    [xmlParser parse];
    
    [connection release];
    [webData release];
}

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName
attributes: (NSDictionary 
*)attributeDict
{
    
if( [elementName isEqualToString:@"HelloResult"])
    {
        
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:@"HelloResult"])
    {
        recordResults 
= FALSE;
        greeting.text 
= soapResults;
        [soapResults release];
        soapResults 
= nil;
    }
}


/*
Implement loadView if you want to create a view hierarchy programmatically
- (void)loadView {
}
*/

/*
Implement viewDidLoad if you need to do additional setup after loading the view.
- (void)viewDidLoad {
    [super viewDidLoad];
}
*/


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    
// Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning]; 
// Releases the view if it doesn't have a superview
    
// Release anything that's not essential, such as cached data
}


- (void)dealloc 
{
    [xmlParser release];
    [super dealloc];
}
@end

相關文章