通过 URL 来访问 WebService 可以很好地解决维护带来的问题,我们可以将 asmx 文件的路径写入配置文件,而后通过读取配置文件中指定的 URL 来调用 WebService 公开的方法并反序列化为本地的对象以供使用。
我们以 VS2005 为工具讲解使用:
首先,新建一个站点或Web项目(需要安装插件),打开站点根目录下的 Web.config 配置文件,在 configuration 节点下新建一个 appSettings 节点,之后再加入如下代码
![](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
之后,在适当的位置创建一个 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.