通过 URL 来访问 WebService 可以很好地解决维护带来的问题,我们可以将 asmx 文件的路径写入配置文件,而后通过读取配置文件中指定的 URL 来调用 WebService 公开的方法并反序列化为本地的对象以供使用。
我们以 VS2005 为工具讲解使用:
首先,新建一个站点或Web项目(需要安装插件),打开站点根目录下的 Web.config 配置文件,在 configuration 节点下新建一个 appSettings 节点,之后再加入如下代码
<add key="WSServer1" value="http://putYourDominHere/WebService.asmx" />
之后,在适当的位置创建一个 WebServiceFactory.cs 文件,通过过这个文件实现 WebService 的读取工作。我们假设 WebService.asmx 中有一个公开的方法 GetScrapCategory,这个方法返回报废类型的一个 DataTable 实例。
/**
* Class : WebServiceFactory
* Author : Gary Fu
* Create : July 10, 2008
*/
using System;
using System.Configuration;
using System.Diagnostics;
using System.Xml.Serialization;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Services;
/// <summary>
/// Summary description for WebServiceFactory
/// </summary>
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name = "WebServiceFactorySoap", Namespace = "http://tempuri.org/")]
public class WebServiceFactory : System.Web.Services.Protocols.SoapHttpClientProtocol
{
public WebServiceFactory()
{
}
/// <summary>
/// 返回一个包含有 ScrapCategory 的 DataTable
/// </summary>
/// <returns></returns>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetScrapCategory",
RequestNamespace = "http://tempuri.org/",
ResponseNamespace = "http://tempuri.org/",
Use = System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public System.Data.DataTable GetScrapCategory()
{
this.Url = ConfigurationManager.AppSettings["WSServer1"];
object[] result = this.Invoke("GetScrapCategory", new object[0]);
return (System.Data.DataTable)result[0];
}
}
* Class : WebServiceFactory
* Author : Gary Fu
* Create : July 10, 2008
*/
using System;
using System.Configuration;
using System.Diagnostics;
using System.Xml.Serialization;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Services;
/// <summary>
/// Summary description for WebServiceFactory
/// </summary>
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name = "WebServiceFactorySoap", Namespace = "http://tempuri.org/")]
public class WebServiceFactory : System.Web.Services.Protocols.SoapHttpClientProtocol
{
public WebServiceFactory()
{
}
/// <summary>
/// 返回一个包含有 ScrapCategory 的 DataTable
/// </summary>
/// <returns></returns>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GetScrapCategory",
RequestNamespace = "http://tempuri.org/",
ResponseNamespace = "http://tempuri.org/",
Use = System.Web.Services.Description.SoapBindingUse.Literal,
ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public System.Data.DataTable GetScrapCategory()
{
this.Url = ConfigurationManager.AppSettings["WSServer1"];
object[] result = this.Invoke("GetScrapCategory", new object[0]);
return (System.Data.DataTable)result[0];
}
}
再之后,在需要的页面调用 WebServiceFactory 新实例的 GetScrapCategory() 方法返回一个 DataTable.