I have one .Net web service and I use it for mobile apps. I used it on windows phone and android apps but I didn't get data from it on iOS yet. For example, there is one method in my web service and it takes one parameter. How can I get data from returning value ? I found one example on internet and I edited it but I can't get data. All of code is here. In this case I need a sample code. Thanks for attention.
web service's information:
namespace : http://tempuri.org url : http://www.example.com/webservice1.asmx method name : FirmaGetir parameter name: firID (string)
Web service request:
POST /webservice1.asmx HTTP/1.1
Host: example.com
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<FirmaGetir xmlns="http://tempuri.org/">
<firID>string</firID>
</FirmaGetir>
</soap12:Body>
</soap12:Envelope>
Returning data:
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<FirmaGetirResponse xmlns="http://tempuri.org/">
<FirmaGetirResult>
<Firma>
<firma_adi>string</firma_adi>
<adres>string</adres>
<telefon>string</telefon>
<id>string</id>
<sektor>string</sektor>
<alt_sektor>string</alt_sektor>
<alt_sektor_adi>string</alt_sektor_adi>
<servis>string</servis>
<map>string</map>
<slogan>string</slogan>
<sayfaGosterimi>int</sayfaGosterimi>
<gpsilce>string</gpsilce>
<gpssemt>string</gpssemt>
<gpspk>string</gpspk>
<duyuru>
<baslik>string</baslik>
<icerik>string</icerik>
<link>string</link>
<image>string</image>
</duyuru>
<firma_link>
<tam_adi>string</tam_adi>
<kisa_adi>string</kisa_adi>
<firma_link>string</firma_link>
</firma_link>
</Firma>
</FirmaGetirResult>
</FirmaGetirResponse>
</soap12:Body>
</soap12:Envelope>
SOAPExampleViewController.h
#import <UIKit/UIKit.h>
@interface SOAPExampleViewController : UIViewController
{
NSXMLParser *xmlParser;
NSMutableData *webData;
NSMutableString *soapResults;
BOOL recordResults;
}
@property(nonatomic, retain) NSMutableData *webData;
@property(nonatomic, retain) NSXMLParser *xmlParser;
@property(nonatomic, retain) NSMutableString *soapResults;
-(IBAction)buttonClick:(id)sender;
@end
SOAPExampleViewController.m
#import "SOAPExampleViewController.h"
@implementation SOAPExampleViewController
@synthesize xmlParser, webData, soapResults;
-(IBAction)buttonClick:(id)sender
{
NSString *firid = [NSString stringWithFormat:@"800"];
recordResults = NO;
NSString *soapMessage = [NSString stringWithFormat:
@"POST /webservice1.asmx HTTP/1.1\n"
"Host: example.com\n"
"Content-Type: application/soap+xml; charset=utf-8\n"
"Content-Length: length\n"
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
"<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">\n"
"<soap12:Body>\n"
"<FirmaGetir xmlns=\"http://tempuri.org/\">\n"
"<firID>%@</firID>\n"
"</FirmaGetir>\n"
"</soap12:Body>\n"
"</soap12:Envelope>\n",firid];
NSLog(@"%@", soapMessage);
NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx?op=FirmaGetir"];
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://tempuri.org/FirmaGetir" 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");
}
}
-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
[webData setLength:0];
NSHTTPURLResponse * httpResponse;
httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"HTTP error %zd", (ssize_t) httpResponse.statusCode);
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data
{
[webData appendData:data];
//NSLog(@"webdata: %@", data);
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError*)error
{
NSLog(@"error with the connection");
[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(@"xml %@",theXML);
[theXML release];
NSString *responseString = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding];
NSLog(@"Respose Data :%@",responseString) ;
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 *)qualifiedName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"firma_adi"] || [elementName isEqualToString:@"Firma"] || [elementName isEqualToString:@"adres"] ) //I'm trying
{
if(!soapResults)
{
soapResults = [[NSMutableString alloc]init];
}
recordResults = YES;
}
}
- (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:@"firma_adi"] || [elementName isEqualToString:@"Firma"] || [elementName isEqualToString:@"adres"] ) // I'm trying
{
recordResults = NO;
NSLog(@"%@", soapResults);
[soapResults release];
soapResults = nil;
}
}
Replace the line below
NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx"];
by this one.
NSURL *url = [NSURL URLWithString:@"http://www.example.com/webservice1.asmx/ServisKontrol"];
It will help.
or just try a great free tool that generates you all the classes and proxy u need. wsdl2code.com
I was trying solve this issue about one week. I don't search anymore about it. The best way for consuming web service is using WCF services with JSON. I found an excellent example about of it. Please follow this tutorial http://www.codeproject.com/Articles/405189/How-to-access-SQL-database-from-an-iPhone-app-Via
Change http://tempuri.org/FirmaGetir
with http://tempuri.org/ServisKontrol
in SOAPAction.
Also you can refer this link for more information. iPhone interaction with ASP.NET WebService
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With