| 简介
在开发web服务的客户端软件时,我们通常通过指定.asmx文件的URL在web服务中添加一个web引用地址。在VS.NET中添加web服务会生成必要的代理对象。然而,经常会有这样的情况出现,在添加web引用地址后,web服务又移到了其他地方。在这种情况下,最简单的自理方法是重新创建代理对象。但如果是已经部署了web服务的客户端软件,又发生了这种情况,那么使URL成为可配置的就是一种比较好的方式了,这样,即使原来的web服务发生了移动,客户端软件也无需重新编译。在本篇文章中,我们将讨论这一问题。
创建web服务
为了配合我们的讨论,我们将创建只有一个方法的简单web服务。按下面的步骤创建该web服务:
- 在VS.NET中创建一个新的C# web服务工程。
- 打开缺省的.asmx文件,并在其中添加下面的代码:
using System;
using System.Web.Services;
namespace HelloWorldWS
{
public class CHelloWorld :
System.Web.Services.WebService
{
[WebMethod]
public string GetHelloWorld()
{
return "Hello World From CHelloWorld";
}
}
}
|
- 如上所述,该web服务类(CHelloWorld)中只包含有一个被称作GetHelloWorld()的方法,它返回一个字符串。
- 在工程中添加另一个.asmx文件。
- 打开该文件,并将它修改成下面的形式:
using System;
using System.Web.Services;
namespace HelloWorldWS
{
public class CHelloWorldBackup :
System.Web.Services.WebService
{
[WebMethod]
public string GetHelloWorld()
{
return "Hello World From CHelloWorldBackup";
}
}
}
|
- 该类与上一个类相似,只是名字成了CHelloWorldBackup。另外它返回的字符串与GetHelloWorld()也不同,因此能够识别方法调用。
- 至此,我们就开发好了二个web服务,并编译该工程。
创建web服务客户端应用程序
下面为我们的web服务创建一个简单的web客户端软件。
- 在VS.NET中创建一个新的ASP.NET web应用程序。
- 该应用程序将有一个缺省的web表单。在我们添加在web服务中添加引用所需要的代码前,右击应用节点,选择“添加web引用”,这一点与在开发正常的web服务时相同。添加web引用将会生成代理web服务对象的代码。
- 在web表单上添加一个按钮,并在该按钮的Click事件中添加下面的代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
localhost.CHelloWorld proxy=new localhost.CHelloWorld;
Response.Write(proxy.GetHelloWorld());
}
|
- 上面的代码显示了在正常情况下我们如何调用web服务,web引用中包含着与web服务位置有关的信息。
- 在部署该客户端软件后,如果再改变了.asmx文件,就会发生错误。要避免发生这种情况,需要将上面的代码修改成如下所示的代码:
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());
}
|
- 在上面的代码中,我们将代理类的Url属性设置为要求的.asmx文件。我们可以将该URL存储在web.config文件的小节,在运行时再来访问它。如果改变了web服务,我们只要修改web.config中的这个URL即可。
- 下面是实现上述目的的代码:
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"];
}
|
在本例中我们的web.config如下所示:
<appSettings>
<add
key="webserviceurl"
value="http://localhost/webserviceurlandtimeout
/HelloWorldBackup.asmx" />
</appSettings>
|
需要注意的是,要使上面的代码能够正确地运行,web服务和web方法的输入参数必须相同。 |