Wednesday, May 25, 2005

Changing Target Web Service At Runtime

 

Changing Target Web Service At Runtime

Introduction

While developing clients for web services, we typically add a web reference to the web service by specifying URL of the .asmx file. Adding a web service in VS.NET generates required proxy object. However, it may happen that after adding the web reference the web service is moved to some other location. In such cases the most easy way is to recreate the proxy object. But what if the same thing happens after you deploy your web service client. It would be nice to allow configurable URL so that even if original web service is moved your clients need not be recompiled. In this article we will see how to do just that.

Creating the web service

For our example we will develop a simple web service that has only one method. Following steps will show you how to proceed.

  • Create a new C# web service project in VS.NET.
  • Open the default .asmx file and add following code to it.
using System; using System.Web.Services;  namespace HelloWorldWS { public class CHelloWorld :  System.Web.Services.WebService { 	[WebMethod] 	public string GetHelloWorld() 	{ 		return "Hello World From CHelloWorld"; 	}	 } } 
  • As shown above this web service class (CHelloWorld) contains a single method called GetHelloWorld() that returns a string.
  • Add another .asmx file to the project.
  • Open the file and modify it as shown below.
using System; using System.Web.Services;  namespace HelloWorldWS { public class CHelloWorldBackup :  System.Web.Services.WebService { 	[WebMethod] 	public string GetHelloWorld() 	{ 		return "Hello World From CHelloWorldBackup"; 	} } } 
  • This class is similar to previous one but its name is CHelloWorldBackup. Also, it returns different string from GetHelloWorld() method so that you can identify the method call
  • Now, that we have both the web services ready compile the project.

Creating web service client

Let us build a simple web client for our web service.

  • Create a new ASP.NET web application in VS.NET.
  • The application will have a default web form. Before writing any code we need to add a web reference to our web service. Right click on the references node and select Add web reference. Follow the same procedure as you would have while developing normal web services. Adding  a web reference will generate code for proxy web service object.
  • Place a button on the web form and add following code in the Click event of the button:
private void Button1_Click (object sender, System.EventArgs e) { localhost.CHelloWorld proxy=new localhost.CHelloWorld; Response.Write(proxy.GetHelloWorld()); } 
  • Above code shows how you will normally call a web service. The web reference contains information about the location of the web service.
  • If you move the .asmx file after you deploy this client, it is bound to get an error. To avoid such situation, modify above code as shown below:
private void Button1_Click (object sender, System.EventArgs e) { localhost.CHelloWorld proxy=new localhost.CHelloWorld; proxy.Url="http://localhost/webserviceurlandtimeout /HelloWorld.asmx"; Response.Write(proxy.GetHelloWorld()); } 
  • In above code we have explicitly set Url property of the proxy class to the required .asmx file. You can easily store this URL in <appSettings> section of web.config file and retrieve it at run time. Now, even if you move your web service, all you need to do is change its URL in the web.config.
  • Following code shows this:
private void Button1_Click(object sender, System.EventArgs e) { localhost.CHelloWorld proxy=new localhost.CHelloWorld; proxy.Url=GetURL(); Response.Write(proxy.GetHelloWorld()); } 
public string GetURL() {    return ConfigurationSettings.AppSettings["webserviceurl"]; } 
  • The web.config looks like this:
<appSettings> <add  key="webserviceurl"  value="http://localhost/webserviceurlandtimeout /HelloWorldBackup.asmx" /> </appSettings>     

Note that in order to work above code correctly, both the web service should have exactly same web method signatures.

I hope you must have got some idea about how to change target web service at run time.

Keep Coding!

(I found this article from here...)

--
Het Waghela
http://hetwaghela.blogspot.com

The person who sends out positive thoughts activates the world around him positively and draws back to himself positive results.

No comments: