Web services allows to transfer the data between different platforms. There are scenarios where iOS application needs to send or receive data using an external web service. In this article we are going to learn how to use consume a .NET web service from within an iOS application.
NOTE: For this article we will be using MonoDevelop
framework to create our .NET project. You might notice that URLS for
invoking the web methods differ from when using Visual Studio vs
MonoDevelop.
Downloading Libraries for iOS Application:
We are going to utilize a couple of third party libraries in our application. Take a look at the following list:
1) ASIHTTPRequest
This
library is used for making HTTP requests using iOS framework. Copy all
the files in the classes folder and in the External folder to a new
folder in your iOS application.
2) JSON Framework
This
library is used to convert the string into the JSON object. Copy all
the files in the Classes folder to a new folder in your iOS application.
Apart
from the above two libraries we are also going to use a number of
built-in frameworks. Add the following frameworks to your project:
1) CFNetwork.framework
2) SystemConfiguration.framework
3) MobileCoreServices.framework
4) libz.1.2.3.dylib
Creating a .NET Web Service:
We
will start by creating a very simple HelloWorld service. Add a new web
service file to your project and name is "NotificationService.asmx". The
"HelloWorld" web method is shown below:
Pretty simple right!
Creating an iOS Client:
Our
iOS client will consist of a button which when clicked will make a
request to the HelloWorld web method of the NotificationService. The
button click event is shown below:
The
URL points to the "HelloWorld" web method which will be invoked when
the button is clicked. The requestFinished and requestFailed methods are
implemented below which are called depending on the result of
invocation.
When you run the iOS application you will get the following in your console.
This
ensures that the web method "HelloWorld" was called from the iOS
application and it returned string "Hello World" to the client. In the
next section we are going to demonstrate how to call a SOAP web service
with parameters.
Invoking Web Service with Parameters:
Calling
parameter less web method is quite easy. In this section we are going
to call a web service which accepts multiple parameters. The web service
implementation is shown below:
The
above web method "Greet" takes two parameters namely deviceToken and
userName and returns a concatenation between the two parameters. In
order to call this web method from an iOS we will need to construct a
SOAP envelope. The implementation is shown below:
A
good way to find out what header values are required is to use browser
or a .NET client to invoke the service and then view the contents of the
request header. The result is shown below:
The
code above shows the response returned from the web method "Greet". As
you can see the response is quite big and hard to parse. You can specify
what kind of response you are interested in and the web service will
adhere to it. The following implementation asks for the JSON response,
although it returns XML response but the response is greatly reduced.
In the next section we are going to create a generic handler will will return pure JSON response.
Creating Generic Handler:
Our simple generic handler will return plain JSON. Here is the implementation of the generic handler.
The handler is available on HighOnCoding at the following URL:
http://highoncoding.com/HighHandler.ashx
The HighHandler.ashx returns the following result:
Since, it is returning JSON format we can easily consume it using iOS application as shown below:
The
above code will display "John Doe" in the console. In the next section
we will return a list of objects from the web service which will be
consumed by the iOS application.
Consuming List of JSON Objects:
In
this section we are going to return a list of objects from the web
service instead of a single object. The list of objects will be returned
in the JSON format. The ASHX HttpHandler is implemented below:
In
the above code we just created a list of zombie objects and then
returned them in the JSON string format using the JavaScriptSerializer
class. If you visit the URL you will get the following result:
Now,
we need to consume this JSON string from inside our iOS application and
populate a UITableView will the JSON object. The following code
initiates a GET request which returns the JSON string representing
Zombie objects.
The
requestFinished is fired when the response is returned. If the response
code is 200 then we proceed to extract the JSON object from the JSON
string and add it to the NSMutableArray called "zombies".
The output is shown below:
If you like to add more content to each UITableCell then you can use the content view portion of the UITableCell.
Conclusion:
In
this article we learned how to communicate with the SOAP web service as
well as how to consume JSON using JSON Framework library. We hope this
article helps you when you are creating interoperability apps between
iOS and the .NET framework.