Using .NET web services and dataset objects in your iphone app
iPhone XML SOAP or .NET Web Services
can seem overwhelming at first but its actually not too hard to do, you can even download a .NET dataset and query it on the iPhone!
Being a complete n00b to iphone’s cocoa touch api / objective C and then jumping in feet first to iphone programming is like being swallowed by an enormous whale. Its very dark, you can see the blow hole, but you know the only way of reaching it is to be blown out by a mucous-infused geisure of hot and sticky whale snot. (if you have ever tried to obtain help on irc or various forums you know what I am talking about) not to mention the endless sea of apple docs that may or may not contain any information that you actually need depending on your luck.
That being said after much hair pulling reading docs forums and some examples from everywhere I have put together a simple solution to connect to a .NET web service over https and return a dataset object back to the iphone that can be queried and used accordingly.
Please Note this article is now deprecated you should use the new framework here
I Can not support this version any more if you ask for help with this version you will not be answered.
Download This: iPhone .NET Dataset Framework.zip
In the attached file you will find 6 documents:
These files are pretty much self explanatory. DataSet.h/.m contain code for creating your DataSet Object and contain methods for querying the dataset.
WebServiceHelper contains the code to connect to the appropriate web service with the appropriate methods and parameters
XMLDataSetParser will take the data received from the webservice and pipe it into your DataSet Object.
To use an XML .NET Web service all you need to do is include these files in your project and then call the following procedures.
//First import the relevant files to your viewcontroller class (XMLDataSetParser is
//included by the DataSet class so there is no need to import it here)
// Create a connection to the web service
WebServiceHelper *DataCon = [[WebServiceHelper alloc] init];
//set up service method and urls please visit the webservice address in a browser to
//get the exact strings the service expects
DataCon.XMLNameSpace = @"https://myurl.com/WebService";
DataCon.XMLURLAddress = @"https://myurl.com/WebService/service.asmx";
DataCon.MethodName = @"getDataSetFromServer";
//add parameters **PARAMETERS ARE CASE SENSITIVE MAKE SURE THEY ARE TYPED CORRECTLY
//AS THE SERVICE EXPECTS THEM**
DataCon.MethodParameters = [[NSMutableDictionary alloc] init];
[DataCon.MethodParameters setObject:@"Parameter1" forKey:@"P1"];
[DataCon.MethodParameters setObject:@"Parameter2" forKey:@"P2"];
//Connect to the service and retrieve the xml raw data into a NSMutableDataObject
//be sure to include a NSMutableData object called "data" or whatever you wish in
self.data = [DataCon initiateConnection];
//Create a dataset object using the new raw data we received from the service
DataSet *dsMyDataSet = [[DataSet alloc] initWithXMLData:self.data];
//Now we have a dataset filled with data from the initWithXMLData command lets
//query some data from it!
//Set up a dictionary object to hold our query data from the dataset
NSMutableDictionary *mydata= [[NSMutableDictionary alloc] init];
//retrieve all rows from the selected table and column
mydata = [dsMyDataSet getRowsForTableAndColumn:@"Table1" col:@"Username" ];
//mydata should contain all rows from column "Username"
//retrieve all rows from the selected table and column where the CURRENT column
//matches a string
mydata = [dsMyDataSet
getRowsForTableAndColumnWhereEqualsString:@"Table1" col:@"username" where:@"bob"];
//mydata should contain all rows from column username containing the exact match "bob"
//retrieve all rows from the selected table and column where a DIFFERENT column
//matches a string
mydata = [dsMyDataSet
col:@"username" whereColumn:@"email" whereValue:@"firstname.lastname@example.org"];
//mydata should contain all rows from column "username" where the column "email"
//contains the exact match "email@example.com"
//you can do what you want with the data at this point like a simple iteration
NSEnumerator *userIterator= [mydata objectEnumerator];
while(username = [userIterator nextObject])
NSLog(@"Username: %@", username);
Thats it!!! Hope this helps someone else save as much time as it is now saving me!