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

之后,在适当的位置创建一个 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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?