你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> <iOS>網絡編程SOAP, WSDL, Web Service

<iOS>網絡編程SOAP, WSDL, Web Service

編輯:IOS開發綜合
1。 我們打開上面這個網址,左邊, 我們可以看到兩個同名方法, LocalTimeByZipCode, 下面一個是用來binding LocalTimeSoap12的, 先不管它, 打開上面這個。   打開後, 可以看到這個方法的Overview描述信息,Input Parameters, Output Parameters.   然後點開Test Form, 輸入一個zipcode可以進行在線測試,如輸入12345. 這個測試可以表明,這個web service目前是可以提供服務的。   再點擊, Message Layout,    好的, 我們可以看到有Soap, HTTP Get, HTTP Post三種方式的使用方法。 這裡我們側重於講SOAP方式。   SOAP部分中, 上面框中顯示的是發起請求時, 需要提交的SOAP內容包, 下面顯示提正常回復的SOAP信息包。   這就是我們要看的內容:   POST /webservices/LocalTime.asmx SOAPAction: http://www.ripedev.com/LocalTimeByZipCode Content-Type: text/xml; charset=utf-8 Content-Length: string Host: string   <?xml version="1.0" encoding="utf-16"?> <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>     <LocalTimeByZipCode xmlns="http://www.ripedev.com/">       <ZipCode>string</ZipCode>     </LocalTimeByZipCode>   </soap:Body> </soap:Envelope>   然後我們創建我們的xcode項目, 和先前的一樣, 建一個按鈕,再一個textView來進行顯示即可。   這是我按鈕的事件:   - (void)startRequestToWsdl2:(id)sender {     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"                              "<LocalTimeByZipCode xmlns=\"http://www.ripedev.com/\">" "<ZipCode>12345</ZipCode>\n"                             "</LocalTimeByZipCode>\n" "</soap:Body>\n" "</soap:Envelope>\n"]; // 順便插一句, SOAP中,Header部分可有可無 , Fault部分可有可無, 但Body和Envelope必須有.     // 上面這部分幾乎按SOAP給的格式就行了。下面這個地址是來自於哪裡呢, 就來自於這個網址,即上面我們要感謝的這個網址:http://www.ripedevelopment.com/webservices/LocalTime.asmx NSString *address =@"http://www.ripedevelopment.com/webservices/LocalTime.asmx"; NSURL* url = [NSURLURLWithString:address]; NSMutableURLRequest *theRequest = [NSMutableURLRequestrequestWithURL:url]; // 然後就是text/xml, 和content-Length必須有。 [theRequest addValue: @"text/xml; charset=utf-8"forHTTPHeaderField:@"Content-Type"];     NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];     [theRequest addValue: msgLength forHTTPHeaderField:@"Content-Length"]; // 下面這行, 後面SOAPAction是規范, 而下面這個網址來自哪裡呢,來自於上面加紅加粗的部分。 [theRequest addValue: @"http://www.ripedev.com/LocalTimeByZipCode"forHTTPHeaderField:@"SOAPAction"]; [theRequestsetHTTPMethod:@"POST"]; [theRequest setHTTPBody: [soapMessage dataUsingEncoding:NSUTF8StringEncoding]];      NSURLConnection *theConnection = [[NSURLConnectionalloc] initWithRequest:theRequestdelegate:self];     if(theConnection) {         webData = [[NSMutableData data] retain];     } else {         NSLog(@"theConnection is NULL");     } 好的, 上面已經把請求給發起了, 下面我們接收數據,並進行XMLParse解析。 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {     [webDatasetLength: 0];     NSLog(@"connection: didReceiveResponse:1"); } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {     [webDataappendData:data];     NSLog(@"connection: didReceiveData:2"); } //如果電腦沒有連接網絡,則出現此信息(不是網絡服務器不通) -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {     NSLog(@"ERROR with theConenction");     [connection release];     [webDatarelease]; } -(void)connectionDidFinishLoading:(NSURLConnection *)connection {     NSLog(@"3 DONE. Received Bytes: %d", [webDatalength]);     NSString *theXML = [[NSStringalloc] initWithBytes: [webDatamutableBytes] length:[webDatalength] encoding:NSUTF8StringEncoding];     NSLog(@"received data=%@", theXML);     [theXML release];          //重新加載xmlParser     if(xmlParser) {         [xmlParserrelease];     }          xmlParser = [[NSXMLParseralloc] initWithData:webData];     [xmlParsersetDelegate: self];     [xmlParsersetShouldResolveExternalEntities:YES];     [xmlParser parse];          [connection release]; } // 上面完成了數據的接收, 下面進行NSXMLParser 的解析。 -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName    attributes: (NSDictionary *)attributeDict {     NSLog(@"4 parser didStarElemen: namespaceURI: attributes:%@", elementName);          if( [elementNameisEqualToString:@"LocalTimeByZipCodeResult"]) {         if(!soapResults) {             soapResults = [[NSMutableString alloc] init];         }         recordResults =YES;     } } -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {     NSLog(@"5 parser: foundCharacters:");     if(recordResults) {         [soapResultsappendString: string];     } } -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {     NSLog(@"6 parser: didEndElement:");     if( [elementNameisEqualToString:@"LocalTimeByZipCodeResult"]) {         recordResults =FALSE;         NSLog(@"receivedResult timezone=%@",soapResults);         [soapResultsrelease];         soapResults = nil;         NSLog(@"hoursOffset result");     } } - (void)parserDidStartDocument:(NSXMLParser *)parser{     NSLog(@"-------------------start--------------"); } - (void)parserDidEndDocument:(NSXMLParser *)parser{     NSLog(@"-------------------end--------------"); }   我們再查一下,這個web service返回的數據是怎麼樣的?如下: HTTP/1.0 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: string   <?xml version="1.0" encoding="utf-16"?> <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>     <LocalTimeByZipCodeResponse xmlns="http://www.ripedev.com/">       <LocalTimeByZipCodeResult>string</LocalTimeByZipCodeResult>     </LocalTimeByZipCodeResponse>   </soap:Body> www.2cto.com </soap:Envelope>   // 從上面加粗, 加綠色的文字,我們可以知道, 我們要找的內容在這裡。所以這也是我們為什麼在Parse的解析中要使用這個LocalTimeByZipCodeResult的原因   好吧, 運行看看吧, 數據已經返回了。 (再PS一下, 上面是直接取數的, 真實的環境中, 應該采用線程的方式,以免影響界面主線程。)
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved