从 JavaScript 调用 ASP.NET Web 服务,无需代理





3.00/5 (4投票s)
本示例演示了如何从 JavaScript 调用外部 Ajax Web 服务,
介绍
传统上,当我们使用 Web 服务时,我们会通过在 Visual Studio 中添加 Web 引用来创建代理。这个代理类包含 Web 服务暴露的方法,这些
方法可以从代码后台调用。如果 Web 服务路径不改变,这很好。
其次,如果 Web 服务暴露了新的功能,我们需要更改并更新 Web 引用,代理也会相应地更新。
在某些地方,我们需要根据数据库驱动的配置动态填充数据,例如在 ERP 应用程序中集成各种系统,如果我们对代码进行更改
在高度可配置的环境中,如果进行静态代码更改,整体工作量将会超出预期,并且定制成本将会很高。
我们可以使用 Sys.Net.WebServiceProxy 轻松调用 Ajax Web 服务,从而从 Javascript 调用
Web 服务,我们只需要在页面中添加 Script Manager。
背景
一些时间以前,我的一个朋友正在开发一种 ERP 产品,他根据数据库条目填充数据,例如如果数据源类型是 SP、Table、view 或 Web 服务;他从数据库(s)中获取数据,但调用 Web 服务他必须依赖于开发时创建的静态代理类。
在定制产品时,他只能更改 DB 条目、aspx 和 javascript(s)。
使用代码
我在 VS 2008 中创建了一个 Ajax Web 服务项目和一个 Web 项目。
Web 服务返回当前的服务器时间,并通过在类级别放置 [System.Web.Script.Services.ScriptService] 属性使其能够通过 Ajax 访问。
我从不同的项目调用这个 Web 服务,该项目有一个简单的表单。
在单击按钮时,我使用 Ajax 提供的 Sys.Net.WebServiceProxy 类调用 Web 服务。
var webServicePath='https:///TimeWebService/TimeService.asmx'; var webMethod='GetServerTime'; Sys.Net.WebServiceProxy.invoke(webServicePath, webMethod, false,{}, OnSucceeded, OnFailed,"User Context",1000000);
function OnSucceeded(result, eventArgs) { var RsltElem = document.getElementById("lblTime"); RsltElem.innerHTML = result; }
我用 C# 开发了这个示例,并以 zip 格式上传了该示例。
历史