Consuming a Webservice Part 2 of 2


Contributed by
Rating: 5 stars5 stars5 stars5 stars5 stars / 3
January 01, 2003
Rate this Article:
MEH MEH++


SEARCH ASP FREE
TOOLS YOU CAN USE

advertisement

Consuming a Webservice

In this article we're going to learn how to consume the 123aspx.com webservice and provide additional value to our users.

Overview
There are 3 parts to consuming a webservice:
1. Discovering the methods are available.
2. Creating a Proxy to the webservice.
3. Calling the webservice


Discovering the methods are available
Before we can begin using a webserivce, we need to understand it. ASP.NET makes this extremely easy by providing a helper page. If you call a webservice from your browser ASP.NET provides us with a very readable interface. In this example, we can see we have only 1 method available to us: GetNewResources. Upon further examination, this webmethod returns a dataset. Here is a screen shot of this page.

We can manually call this webservice by clicking Invoke. Invoking our webservices produces a human readable XML document. By examining this XML document, we can determine the 4 different fields of our dataset:
1. URL
2. DateUpdated
3. Domain
4. Name
Here is a snippet of the XML produced from Invoking our webservice.

<xsd:element name="URL" type="xsd:string" minOccurs="0" />
<xsd:element name="DateUpdated" type="xsd:string" minOccurs="0" />
<xsd:element name="Domain" type="xsd:string" minOccurs="0" />
<xsd:element name="Name" type="xsd:string" minOccurs="0" />


Creating a Proxy
Now that we know what our webservice returns, we can start to access it. However, before we can access the webservice, we need to create a proxy DLL that interfaces with the webservice. By creating a proxy, all the work is done for us, and we are able to call the webservice, just like we would any other object that resides locally on our system.

To create the proxy we use a utility in the .NET SDK called "WSDL.exe". WSDL.exe is a command line tool that requires different switches. Because I can never type the switches correctly the first time, I like to use batch files. Once we provide WSDL.exe with the correct switches, it outputs a .vb file (because I chose to use VB.NET as the language, using the /l switch). Once you have the .vb file, you run it through the compiler, vbc.exe, to create the .dll. Here is the batch file I used to create the proxy dll.


ECHO copy the following lines to a text file and save with the extension ".bat"
ECHO this batch file will create two files as specified by the outCodeFileName
ECHO and the outDLLFileName

Set UseLanguage=VB
Set WSDLPath=http://64.85.12.73/websvc/whatsnew123aspx_ds.asmx?WSDL
Set outCodeFileName=whatsnew123aspX_ds.vb
Set outDLLFileName=whatsnew123aspX_ds.dll
Set myNamespace=AspX123
set assemblies=
System.Web.dll,System.dll,System.Web.Services.dll,
                                                        System.Xml.dll,System.Data.dll

c:wsdl.exe /n:%myNamespace% /l:%UseLanguage% /out:%outCodeFileName% %WSDLPath%
c:vbc.exe /out:%outDLLFileName% /t:library /r:%assemblies% %outCodeFileName%


In our batch file, we are using the following switches:
/c: -- creates a proxy source code file from a SDL
/n: -- namespace for our generated proxy,i.e.AspX123
/l -- language we want to use (i.e. vb, csharp, etc.. )
/out: -- the location to output our source code file

Next we execute the vbc compiler, feeding it the newly created source file to produce our .dll. Once we have our dll, we copy it to our /bin directory found under our application web.



Calling our Webservice
To call our webservice from our .aspx page, we first need to reference the namespace we created in our batch file, using an Import directive.

<%@ Import Namespace="AspX123" %>


Now that we have our namespace, we can dimension a variable to hold an instance of our webmethod, and call our webmethod.

Dim myWebSvc as AspX123.AspX123WebSvc = New AspX123WebSvc()
Dim ds as DataSet
ds = myWebSvc.GetNewResources()


AspX123WebSvc is our class we defined in our webservice, and GetNewResources() is our webmethod that returns our dataset.

Additional Notes
Because www.123aspx.com is really only updated once a day, we don't want to have to call the webservice every time someone views our website. Instead, we want to cache the default dataview of the dataset on our webserver, and set it to expire every 12 hours. The following code will achieve this.

Dim CACHE_DURATION as Integer = 12
Dim aspXNewResources as DataView
aspXNewResources = Ctype( Cache("aspXNewResources"),DataView )

If ( aspXNewResources Is Nothing ) Then
REM -- use the webservice, and populate the Cache
Dim myWebSvc as AspX123.AspX123WebSvc = New AspX123WebSvc()
Dim ds as DataSet
Dim fWebService as Boolean = False

Try
ds = myWebSvc.GetNewResources()
fWebService = True
Catch eWeb as System.Exception
fWebService = False
End try

IF fWebService Then 'insert the dataview into the cache
aspXNewResources = New DataView( ds.Tables("ResourceList") )
Cache.Insert("aspXNewResources", aspXNewResources, Nothing, DateTime.Now.AddHours(CACHE_DURATION), TimeSpan.Zero)
End If

End If
myDataGrid.DataSource=aspXNewResources
myDataGrid.DataBind()


aspXNewResources is declared as a DataView and we attempt to retrieve it from the webserver cache by
aspXNewResources = Ctype( Cache("aspXNewResources"),DataView )
If aspXNewResources is nothing, then we need to call our webservice and populate the cache, by calling Cache.Insert. Cache.Insert is an overloaded function. In our example, Cache.Insert takes the following 5 parameters:
Cache.Insert(param1, param2, param3, param4, param5)
param1 -- name of the cache object
param2 -- object to cache
param3 -- cache dependency
param4 -- timespan for cache to last
param5 -- absolute time for cache to expire


Our Results

Now that we've loaded the ASP.NET cache with our DataView, let's go ahead and bind the dataview to a Datagrid and display our results. With a little bit of formatting, our results can be seen below.
blog comments powered by Disqus
ASP.NET CODE ARTICLES

- How to Use the ListBox Control in ASP.NET 2.0
- How to Load XML Documents in ASP.NET 2.0
- DataGrid Code
- ASP.NET Guestbook
- User Controls and Client Side Scripting
- ASP.NET Programming with Microsoft's AS...
- ASP.NET Basics (part 3): Hard Choices
- ASP.NET Basics (part 2): Not My Type
- ASP.NET Basics (part 1): Nothing But .Net
- Directory Tree Browser
- How to get the confirmation of Yes/No from a...
- Complete example using custom errors and wri...
- Paging Certain # records per page .NET style
- General Methods of formatting and Subtractin...
- .NET LinkButton web control

ASP Web Hosting ASP.Net Web Hosting Windows Web Hosting
 
 
 

ASP Free Forums 
 RSS  Tutorials RSS
 RSS  Forums RSS
 RSS  All Feeds
Site Map 
Request Media Kit
Write For Us Get Paid 
Weekly Newsletter
 
Developer Updates  
Free Website Content 
Privacy Policy 
Support 


© 2003-2012 by Developer Shed. All rights reserved. DS Cluster 10 - Follow our Sitemap
Most Popular Topics
All ASP.Net Tutorials