从 URL 调用 WebService
在ASPX页面中调用一个 asmx WebService 最通常的做法是通过 IDE 加入 Web 引用,这种方法的方便之处在于我们只需知道 asmx 文件的 URL 路径和公开的方法名即可在 ASPX 页面中调用并反序列化为本地的对象。但有时候这种方法会带来某些维护方面的问题,如 WebService 的路径一旦变动我们将不得不重新引用新的 URL 路径,重新编译项目。
通过 URL 来访问 WebService 可以很好地解决维护带来的问题,我们可以将 asmx 文件的路径写入配置文件,而后通过读取配置文件中指定的 URL 来调用 WebService 公开的方法并反序列化为本地的对象以供使用。
我们以 VS2005 为工具讲解使用:
首先,新建一个站点或Web项目(需要安装插件),打开站点根目录下的 Web.config 配置文件,在 configuration 节点下新建一个 appSettings 节点,之后再加入如下代码
之后,在适当的位置创建一个 WebServiceFactory.cs 文件,通过过这个文件实现 WebService 的读取工作。我们假设 WebService.asmx 中有一个公开的方法 GetScrapCategory,这个方法返回报废类型的一个 DataTable 实例。
再之后,在需要的页面调用 WebServiceFactory 新实例的 GetScrapCategory() 方法返回一个 DataTable.
通过 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.