Click here to Skip to main content
12,304,884 members (65,435 online)
Click here to Skip to main content
Add your own
alternative version


174 bookmarked

ASP.NET Web Service

, 7 Jul 2001 CPOL
Rate this:
Please Sign up or sign in to vote.
Tutorial on Creating ASP.NET Web Service


We can now use ASP.NET to create Web Service that is based on industrial standards included XML, SOAP and WSDL.

ASP.NET Web Services support clients using HTTP-POST, HTTP-GET and SOAP protocols to invoke methods exposed, depends on your specific requirement you choose one method over the others. The main difference between HTTP-GET or HTTP-POST and SOAP is the data types supported by SOAP is much richer because SOAP used XSD schema to represent complex data types.

Here are samples codes I use to test the building of ASP.NET Web Service:

Step 1: Create the ASP.NET Web Service Source File

ASP.NET Web Service file name has extension asmx and my file is named MyWebService.asmx, source is listed as follows:

File: MyWebService.asmx

<%@ WebService Language="C#" class="MyClass" %>

using  System.Web.Services ;

public class MyClass
        public  int Add ( int a,  int  b)
                return a + b ;        

The page directive WebService is required and class is the name of the .NET Class to expose the Web Service, each method exposes as Web Service Class Method need to have a declarative attribute statement [WebMethod()] in front of it. Here the .NET Class implementation is included in the same file with ASP.NET Web Service file but it is not mandatory and we can choose to include an external .NET Assembly to implement the service as the following example:

File: MyWebService2.asmx

<%@ WebService Language="C#"  class="MyWebService.MyStringReverse, MyWebServiceImpl" %>

The file MyWebService2.asmx is referencing another .NET Assembly MyWebServiceImpl which is located under the /bin ASP.NET Application sub-folder (note that the default location for Assemblies in ASP.NET is /bin sub-folder under each ASP.NET Applications). The source of .NET Assembly MyWebServiceImpl is written by C# and is listed as follows:

File: MyWebServiceImpl.cs

namespace MyWebService
 	using System ;
using System.Web.Services ;

public class MyStringReverse: WebService
        		[WebMethod(Description="Reverse String")]
        		public  String ReverseString ( String InString )
                		// Check null String
                		if ( InString == null )  return null ;
                		Int32 intSize = InString.Length ;
                	char[] arrayInString = InString.ToCharArray() ;
            	    	char[] arrayOutString = new char[intSize] ;
                        for (Int32 i = 0 ; i < intSize ; ++i) 
                        		arrayOutString[i] = arrayInString[intSize-i-1] ;
                	return new String(arrayOutString) ;        

To create the Assembly, you can use the following command:

C:\>CSC   /t:library    /out:bin/MyWebServiceImpl.dll   MyWebServiceImpl.cs 

The following sections I will continue use MyWebService.asmx as my experimental Web Service.

Step 2: Create the ASP.NET Web Service Clients

There are many ways to consume Web Services and have three examples. The first one uses HTTP-POST protocol and it has advantage to coexist with today’s application quite well and use HTTP-GET is similar and I let reader to try it. The second one uses SOAP Proxy Client Object generated by WSDL utility and it provides programmers with their familiar object modal that they call methods provided by the generated Proxy Interface. The final one uses SOAP standard request message and it parses SOAP response message with the help of XMLHTTP COM object that is installed by Microsoft XML Parser 3.0.

Client use HTTP-POST Method

The example is an ASP.NET page TestWebService.aspx and source listing as follows:

File: TestWebService.aspx


<form action="http://localhost/ASP.NET/MyWebService.asmx/Add"  method="POST">

        <input name="a"></input>
        <input name="b"></input>
        <input type="submit" value="Enter"> </input>


The ASP page accepts parameters from browser and calls the Add method of the Web Service MyWebService via the HTTP-POST protocol, the result will be XML message and need further parsing by the client application. To parse the response, client can use either Java XML parser in applet or use IE5’s DOM Object.

The following is an example of XML response when parameters a=1, b=2 are inputted:

<?xml version="1.0" encoding="utf-8" ?>
<int xmlns="">3</int>

Client use WSDL Generated Proxy Object

If your client will be Windows applications or ASP.NET applications, you can use WSDL.EXE utility to created standard .NET Assemble to provide Proxy Class for your clients.

Here are steps you can follow and try:

Use WSDL.EXE utility to create the Proxy Class source file in any language you have chosen and here I use C# and command as follows:

C:\>wsdl    /language:C#     /out:MyProxyClass.cs    http://localhost/ASP.NET/MyWebService.asmx

MyProxyClass.cs is generated and source listing as follows:

File: MyProxyClass.cs

// <autogenerated>
//     This code was generated by a tool.
//     Runtime Version: 1.0.2914.16
//     Changes to this file may cause incorrect behavior and will be lost if 
//     the code is regenerated.
// </autogenerated>

// This source code was auto-generated by wsdl, Version=1.0.2914.16.
using System.Diagnostics;
using System.Xml.Serialization;
using System;
using System.Web.Services.Protocols;
using System.Web.Services;

[System.Web.Services.WebServiceBindingAttribute(Name="MyClassSoap", Namespace="")]
public class MyClass : System.Web.Services.Protocols.SoapHttpClientProtocol {
    public MyClass() {
        this.Url = "http://localhost/ASP.NET/MyWebService.asmx";


    public int Add(int a, int b) {
        object[] results = this.Invoke("Add", new object[] {
        return ((int)(results[0]));
    public System.IAsyncResult BeginAdd(int a, int b, System.AsyncCallback callback, object asyncState) {
        return this.BeginInvoke("Add", new object[] {
                    b}, callback, asyncState);
    public int EndAdd(System.IAsyncResult asyncResult) {
        object[] results = this.EndInvoke(asyncResult);
        return ((int)(results[0]));

Then we need to create the .NET Assembly for used by clients:

C:\> csc /t:library MyProxyClass.cs

The above command will compile the source and create MyProxyClass.dll library file.

I use ASP to depict how to use the proxy object and the file is TestWebServiceWithProxy.aspx source listing as follows:

File: TestWebServiceWithProxy.aspx

<%@ page language="C#" %>
<script runat="server">
        void btn_click(Object source, EventArgs e)
                MyClass mycls = new MyClass() ;
                int x = Int32.Parse(a.Text) ;
                int y = Int32.Parse(b.Text);
                Message.Text = mycls.Add( x, y).ToString() ;

<form Action = "TestWebServiceWithProxy.aspx" runat="server">
        <asp:TextBox id="a" runat="server" />
        <asp:TextBox id="b" runat="server" />
        <asp:button id=btn OnClick="btn_click" Text="Enter" runat="server" />
        <p><asp:label id="Message" runat="server" /></P>

Client use XMLHTTP to call Web service via SOAP

To fully explore the SOAP capability, you may choose to call your ASP.NET Web Service via SOAP core protocol and here I provide another example for reference.

To test the ASP.NET service with SOAP protocol, I create an ASP client file TestWebServiceByXML.asp and its source is listed as follows:

File: TestWebServiceByXML.asp

<script language="jscript">
        function btn_click (a, b)
                var xmlObj = new ActiveXObject("Msxml2.DOMDocument") ;
                var sXml  = "<?xml version=\"1.0\" ?>" ;
                      sXml += "<soap:Envelope "
                      sXml += "xmlns:xsi=\"\" " ;
                      sXml += "xmlns:xsd=\"\" " ;
                      sXml += "xmlns:soap=\"\">" ;
                      sXml += "<soap:Body>" ;
                      sXml += "<Add xmlns=\"\">" ;
                      sXml = sXml + "<a>" + a.value  + "</a>" ;
                      sXml = sXml + "<b>" + b.value  + "</b>" ;                      
                      sXml += "</Add></soap:Body></soap:Envelope>"
	   // Try to parse the XML string into DOM object 
                xmlObj.loadXML(sXml) ;
	   //To see the validated XML string is well-formed 
                XmlRequest.innerText =  xmlObj.xml  ;
                var xmlHTTP = new ActiveXObject("Msxml2.XMLHTTP") ;
                xmlHTTP.Open ( "Post", "http://localhost/ASP.NET/MyWebService.asmx", false) ;
                xmlHTTP.setRequestHeader("SOAPAction", "") ;
                xmlHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8" ) ;
                xmlHTTP.Send(xmlObj.xml) ;
                MyResult.innerText =  xmlHTTP.responseText ;
                var xmlResponse = xmlHTTP.responseXML ;
                answer.innerText = xmlResponse.selectSingleNode("soap:Envelope/soap:Body/AddResponse/AddResult").text ;

        <p>Please input a:<input id="a" name="a"></input></p>
        <p>Please input b:<input id="b" name="b"></input></p>
        <input type="button" id="btn"  value="Enter" 
                onclick="jscript:btn_click(a, b)"></input>
        <p>Answer is <span id="answer"></span></p>
        <span id="XmlRequest"></span>
        <span id="MyResult"></span>


Here I installed Microsoft XML Parser 3.0 in my client machine that give me the XMLHTTP and DOM COM objects to test my application.


There are many difference implementations for SOAP Service but the standard is there and we can start to build some useful applications on it. Although ASP.NET or SOAP web services have many nice features, if you want to consume the exposed Web Services in you clients, please make sure you have the latest libraries installed because standards continue evolving and all vendors try their best achieve the edge in such open standards war.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Hong Kong Hong Kong
I am always interested in finding innovative ways for building better applications and founded a technology company since 2003. Welcome to exchange any idea with you and if I am not too busy before deadline of projects, I will reply your emails. Also, if you willing to pay for consulting works and customized software development, you can leave me message.

You may also be interested in...

Comments and Discussions

GeneralCheck Web Service is Running or not Pin
ketan d patel11-Nov-08 19:56
memberketan d patel11-Nov-08 19:56 
GeneralMessage Automatically Removed Pin
10-Sep-08 12:41
memberDotNetGuts10-Sep-08 12:41 
GeneralRe: Web Service terms and Terminology in .net Pin
Nareshgrn22-Mar-13 17:02
memberNareshgrn22-Mar-13 17:02 
QuestionHow to access PHP Web service in application Pin
vivekdeshpande7-May-08 4:04
membervivekdeshpande7-May-08 4:04 
QuestionFile or assembly Handler or one of its dependencies was not found Pin
sagar_harale4-Jun-07 2:27
membersagar_harale4-Jun-07 2:27 
GeneralVice Versa Pin
Javaman2101119-May-07 11:45
memberJavaman2101119-May-07 11:45 
GeneralWeb Service Pin
nikhilmittal26-Mar-07 3:30
membernikhilmittal26-Mar-07 3:30 
Generalerrors after compilation Pin
Member #38769341-Mar-07 0:06
memberMember #38769341-Mar-07 0:06 
i am getting following errors when i try to copile the program for VOICE CALL:
Error 4 'ASP.app_data_default_aspx.GetTypeHashCode()': no suitable method found to override c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website11\89f8739e\a1cdd44\App_Web_nmxn8xea.0.cs
Error 5 'ASP.app_data_default_aspx.ProcessRequest(System.Web.HttpContext)': no suitable method found to override c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website11\89f8739e\a1cdd44\App_Web_nmxn8xea.0.cs
Error 6 'ASP.app_data_default_aspx' does not implement interface member 'System.Web.IHttpHandler.IsReusable' c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website11\89f8739e\a1cdd44\App_Web_nmxn8xea.0.cs
Error 7 Make sure that the class defined in this code file matches the 'inherits' attribute, and that it extends the correct base class (e.g. Page or UserControl). C:\Documents and Settings\sk0c8336\My Documents\Visual Studio 2005\WebSites\WebSite11\App_Data\Default.aspx.cs 18 33 C:\...\WebSite11\

Generalerrors after compilation Pin
Member #38769341-Mar-07 0:05
memberMember #38769341-Mar-07 0:05 
GeneralImplementing webservices which in turn calls a console app Pin
unfielusuario27-Jul-06 6:55
memberunfielusuario27-Jul-06 6:55 
GeneralThat is too difficult to access Pin
om das8-Jun-06 1:21
memberom das8-Jun-06 1:21 
Generalnot getting result Pin
mbsum23-Feb-06 20:01
membermbsum23-Feb-06 20:01 
GeneralRe: not getting result Pin
ziwat rao1-Jul-08 14:07
memberziwat rao1-Jul-08 14:07 
GeneralRe: not getting result Pin
ziwat rao1-Jul-08 14:12
memberziwat rao1-Jul-08 14:12 
QuestionRequest format is invalid: text/xml; charset=utf-8. , any help ??? Pin
Yazeed hs7-Dec-05 1:10
memberYazeed hs7-Dec-05 1:10 
AnswerRe: Request format is invalid: text/xml; charset=utf-8. , any help ??? Pin
Christer Bermar14-Feb-06 4:21
memberChrister Bermar14-Feb-06 4:21 
GeneralRe: Request format is invalid: text/xml; charset=utf-8. , any help ??? Pin
Henk-Jan Visscher22-Aug-07 2:54
memberHenk-Jan Visscher22-Aug-07 2:54 
GeneralRe: Request format is invalid: text/xml; charset=utf-8. , any help ??? Pin
Member 82805192-Oct-11 7:24
memberMember 82805192-Oct-11 7:24 
Questionwsdl document Pin
lshirota7-Oct-05 15:29
memberlshirota7-Oct-05 15:29 
Generalweb services &amp; database Pin
arzu20-Oct-04 13:45
memberarzu20-Oct-04 13:45 
GeneralRe: web services &amp; database Pin
Hemang Shukla23-Nov-04 16:07
memberHemang Shukla23-Nov-04 16:07 
GeneralResourceManager in WebServices Pin
Jörg Boekhoff6-Apr-03 20:39
memberJörg Boekhoff6-Apr-03 20:39 
Generalmodify xml result Pin
imanol3-Apr-03 20:02
memberimanol3-Apr-03 20:02 
GeneralASP .Net Web service and COM interop Pin
Rais29-Aug-02 2:11
memberRais29-Aug-02 2:11 
QuestionHow can I test my web service in VS .net? Pin
BONG19-Jul-02 19:31
sussBONG19-Jul-02 19:31 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.160530.1 | Last Updated 8 Jul 2001
Article Copyright 2001 by matthew_from_hk
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid