Environment: .NET 1.0.3705, IIS 5.0
Introduction
Visual Studio .NET makes .NET programming simple and accelerates the
development process. It hides a lot of repetitive and configuration
details from the user and improves productivity. However, sometimes you
would like to program for .NET without using VS .NET; for example, you
want to learn .NET framework programming and do not have access to VS
.NET or you want to know what is actually going on under the hood.
(continued)

Writing
a Web Service in .NET using VS .NET very is easy. However, it is
possible to write Web Services using the plain .NET SDK. I struggled a
lot to write Web Services without VS .NET and tried to find help on the
Net. There are a lot of examples available for writing Web Services
using VS.NET, but you will rarely find any examples of writing Web
Services using only the .NET SDK. This article is exactly for this
purpose. It looks at Web Services development using the .NET SDK alone.
We will write and publish a simple web Service. We
will also write two Web Service consumers: one Web-based consumer
(ASP.NET application) and another Windows application-based consumer.
Let's start writing our first Web Service.
Following is our first Web Service; it exposes two
methods (Add and SayHello) as Web Services to be used by applications.
This is a standard template for a Web Service. .NET Web Services use
the .asmx extension. Note that a method exposed as a Web Service has
the WebMethod attribute. Save this file as FirstService.asmx in the IIS
virtual directory (as explained in configuring IIS; for example,
c:\MyWebSerces).
FirstService.asmx
<%@ WebService language="C" class="FirstService" %>
using System;
using System.Web.Services;
using System.Xml.Serialization;
[WebService(Namespace="http://localhost/MyWebServices/")]
public class FirstService : WebService
{
[WebMethod]
public int Add(int a, int b)
{
return a + b;
}
[WebMethod]
public String SayHello()
{
return "Hello World";
}
}
To test a Web Service, it must be published. A Web
Service can be published either on an intranet or the Internet. We will
publish this Web Service on IIS running on a local machine. Let's start
with configuring the IIS.
To test that IIS has been configured properly, copy
an HTML file (for example, x.html) in the virtual directory
(C:\MyWebServices) created above. Now, open Internet Explorer and type
http://localhost/MyWebServices/x.html. It should open the x.html file.
If it does not work, try replacing localhost with the IP address of
your machine. If it still does not work, check whether IIS is running;
you may need to reconfigure IIS and Virtual Directory.
To test our Web Service, copy FirstService.asmx in
the IIS virtual directory created above (C:\MyWebServices). Open the
Web Service in Internet Explorer
(http://localhost/MyWebServices/FirstService.asmx). It should open your
Web Service page. The page should have links to two methods exposed as
Web Services by our application. Congratulations; you have written your
first Web Service!!!
As we have just seen, writing Web Services is easy in
the .NET Framework. Writing Web Service consumers is also easy in the
.NET framework; however, it is a bit more involved. As said earlier, we
will write two types of service consumers, one Web- and another Windows
application-based consumer. Let's write our first Web Service consumer.
Write a Web-based consumer as given below. Call it
WebApp.aspx. Note that it is an ASP.NET application. Save this in the
virtual directory of the Web Service (c:\MyWebServices\WebApp.axpx).
This application has two text fields that are used to
get numbers from the user to be added. It has one button, Execute,
that, when clicked, gets the Add and SayHello Web Services.
WebApp.axpx
<%@ Page Language="C#" %>
<script runat="server">
void runSrvice_Click(Object sender, EventArgs e)
{
FirstService mySvc = new FirstService();
Label1.Text = mySvc.SayHello();
Label2.Text = mySvc.Add(Int32.Parse(txtNum1.Text),
Int32.Parse(txtNum2.Text)).ToString();
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
<p>
<em>First Number to Add </em>:
<asp:TextBox id="txtNum1" runat="server"
Width="43px">4</asp:TextBox>
</p>
<p>
<em>Second Number To Add </em>:
<asp:TextBox id="txtNum2" runat="server"
Width="44px">5</asp:TextBox>
</p>
<p>
<strong><u>Web Service Result -</u></strong>
</p>
<p>
<em>Hello world Service</em> :
<asp:Label id="Label1" runat="server"
Font-Underline="True">Label</asp:Label>
</p>
<p>
<em>Add Service</em> :
& <asp:Label id="Label2" runat="server"
Font-Underline="True">Label</asp:Label>
</p>
<p align="left">
<asp:Button id="runSrvice" onclick="runSrvice_Click"
runat="server" Text="Execute"></asp:Button>
</p>
</form>
</body>
</html>
After the consumer is created, we need to create a
proxy for the Web Service to be consumed. This work is done
automatically by Visual Studio .NET for us when referencing a Web
Service that has been added. Here are the steps to be followed:
Writing a Windows application-based Web Service
consumer is the same as writing any other Windows application. The only
work to be done is to create the proxy (which we have already done) and
reference this proxy when compiling the application. Following is our
Windows application that uses the Web Service. This application creates
a Web Service object (of course, proxy) and calls the SayHello and Add
methods on it.
WinApp.cs
using System;
using System.IO;
namespace SvcConsumer{
class SvcEater
{
public static void Main(String[] args)
{
FirstService mySvc = new FirstService();
Console.WriteLine("Calling Hello World Service: " +
mySvc.SayHello());
Console.WriteLine("Calling Add(2, 3) Service: " +
mySvc.Add(2, 3).ToString());
}
}
}
Compile it using c:>csc /r:FirstService.dll
WinApp.cs. It will create WinApp.exe. Run it to test the application
and the Web Service.
Now, the question arises: How can I be sure that my
application is actually calling the Web Service? It is simple to test.
Stop your Web server so that the Web Service cannot be contacted. Now,
run the WinApp application. It will fire a run-time exception. Now,
start the Web server again. It should work. Great, isn't it?
Download tutorial source code - 2 Kb