ASP.NET 3.5核心编程学习笔记(58):利用页面方法来进行远程调用
2011-05-04 15:15
881 查看
页面方法只是页面代码类中所暴露的带有WebMethod特性的公共静态方法。页面方法和支持AJAX的Web服务的运行时引擎几乎相同。使用页面方法,我们不用创建和发布服务。
页面方法的定义
在页面代码类中定义公共静态方法,并为其添加WebMethod特性,便会将ASP.NET AJAX页面转化为Web服务:
我们可以在页面方法中使用任何数据类型,所有类型在调用期间都会被转换为JSON格式。
我们也可以在aspx源文件中以内联方式定义Web方法:
注意,页面方法针对的是给定的ASP.NET页面,只有宿主页面才能调用自身的Web方法,不支持跨页面调用。
页面方法的启用
如果ASP.NET AJAX页面的代码类中包含WebMethod修饰的静态方法,运行时引擎会生成与Web服务一样的JavaScript代理类。我们可使用该类的实现来调用服务器方法。该类的名称会被硬编码为PageMethods。
注意,页面方法在默认情况下是被禁用的。为启用它,我们必须将脚本管理器的EnablePageMethods属性设为true。
为能执行页面方法,必须在web.config文件中HTTP模块ScriptModule:
该模块的工作过程是,监听会话状态加载后的应用程序事件,执行页面方法,然后为调用者生成响应。由于获取会话状态是在启动页面生命周期之前执行的,所以,这种方法调用不会建立页面的生命周期,也不会进行子控件的初始化和处理。
页面方法的使用
页面方法的集合会以固定的类名暴露给JavaScript代码--PageMethods。该类会列出所有静态方法,且该类不需自行实例化。
PageMethods代理类
与Web服务的代理类不同,PageMethods代理类总会以内联脚本的形式嵌在引用它的页面主体中。否则,对于不同的页面,该类的名称应各不相同。该类的结构几乎与AJAX Web服务代理类的结构相同。
页面方法的执行
以上述代码中的GetTime方法为例:
通过页面方法,我们能够使用HttpContext的Current属性访问视图状态、ASP.NET Cache、User和其他内部对象。HTTP上下文针对的不是页面的生命周期,它在接到请求后就存在,并一直伴随着请求而存在。
页面方法的定义
在页面代码类中定义公共静态方法,并为其添加WebMethod特性,便会将ASP.NET AJAX页面转化为Web服务:
public class TimeServicePage : System.Web.UI.Page { [WebMethod] public static DateTime GetTime() { return DateTime.Now; } }
我们可以在页面方法中使用任何数据类型,所有类型在调用期间都会被转换为JSON格式。
我们也可以在aspx源文件中以内联方式定义Web方法:
<script type="text/C#" runat="server"> [WebMethod] public static DateTime GetTime() { return DateTime.Now; }
</script>
注意,页面方法针对的是给定的ASP.NET页面,只有宿主页面才能调用自身的Web方法,不支持跨页面调用。
页面方法的启用
如果ASP.NET AJAX页面的代码类中包含WebMethod修饰的静态方法,运行时引擎会生成与Web服务一样的JavaScript代理类。我们可使用该类的实现来调用服务器方法。该类的名称会被硬编码为PageMethods。
注意,页面方法在默认情况下是被禁用的。为启用它,我们必须将脚本管理器的EnablePageMethods属性设为true。
<asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true" />
为能执行页面方法,必须在web.config文件中HTTP模块ScriptModule:
<httpModules> <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions" /> </httpModules>
该模块的工作过程是,监听会话状态加载后的应用程序事件,执行页面方法,然后为调用者生成响应。由于获取会话状态是在启动页面生命周期之前执行的,所以,这种方法调用不会建立页面的生命周期,也不会进行子控件的初始化和处理。
页面方法的使用
页面方法的集合会以固定的类名暴露给JavaScript代码--PageMethods。该类会列出所有静态方法,且该类不需自行实例化。
PageMethods代理类
与Web服务的代理类不同,PageMethods代理类总会以内联脚本的形式嵌在引用它的页面主体中。否则,对于不同的页面,该类的名称应各不相同。该类的结构几乎与AJAX Web服务代理类的结构相同。
页面方法的执行
以上述代码中的GetTime方法为例:
function getTime() { PageMethods.GetTime(methodCompleted); } function methodCompleted(results, context, methodName) { var displayString = results.format("ddd, dd MMMM yyyy"); $get("Label1").innerHTML = displayString; }
通过页面方法,我们能够使用HttpContext的Current属性访问视图状态、ASP.NET Cache、User和其他内部对象。HTTP上下文针对的不是页面的生命周期,它在接到请求后就存在,并一直伴随着请求而存在。
相关文章推荐
- ASP.NET 3.5核心编程学习笔记(3):页面的生命周期
- ASP.NET 3.5核心编程学习笔记(36):页面的视图状态和控件状态
- ASP.NET 3.5核心编程学习笔记(56):AJAX Web Service的调用
- ASP.NET 3.5核心编程学习笔记(40):页面缓存
- ASP.NET 3.5核心编程学习笔记(8):错误处理、页面跟踪
- ASP.NET 3.5核心编程学习笔记:AJAX Web Service的调用
- ASP.NET 3.5核心编程学习笔记(1):ASP.Net页面请求处理流程
- ASP.NET 3.5核心编程学习笔记(9):用户配置文件
- ASP.NET 3.5核心编程学习笔记(47):ASP.NET的安全性之安全性上下文与信任级别
- ASP.NET 3.5核心编程学习笔记(16):DataTable、DataView
- ASP.NET 3.5核心编程学习笔记(24):DataGrid控件
- ASP.NET 3.5核心编程学习笔记(28):HttpContext类
- ASP.NET 3.5核心编程学习笔记(6):Web控件
- ASP.NET 3.5核心编程学习笔记(7):单窗体、多窗体、跨页投递、重定向
- ASP.NET 3.5核心编程学习笔记(52):Microsoft AJAX JavaScript类库
- ASP.NET 3.5核心编程学习笔记(41):HTTP处理程序与HTTP模块
- ASP.NET 3.5核心编程学习笔记(44):HTTP处理程序的编写之从数据库加载图像
- ASP.NET 3.5核心编程学习笔记(45):HTTP处理程序之高级编程
- ASP.NET 3.5核心编程学习笔记(21):LINQ查询语法
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理