ASP.NET中的WebRequestExecutor


  本文标签:WebRequestExecutor ASP.NET

  WebRequestExecutor是 ASP.NET AJAX网络访问基础结构的唯一修改点  。理论上,我们可以使用自定义的WebRequestExecutor来取代默认的 XMLHttpExecutor  。我们要做的,其实只是开发一个继承于Sys.Net.WebRequestExecutor类  。不过事实上,在实际使用中,Sys.Net.XMLHttpExecutor已经足够用了,真的要自定义,也只需继承这个类即可  。就像接下去的例子一样  。

  可是,Sys.Net.XMLHttpExecutor作为一个父类来说,可以说相当的不友好  。先不多说,我们开始吧  。在这个例子中,我们将开发一个 TraceExecutor,如果使用了这个Executor,Request和Response的信息都会被打印在页面上,开发人员可以把这些内容作为一个参考  。TraceExecutor非常简单,代码也很短  。

  一般情况下,在这个方法中,会初始化所有的“私有”变量  。不过在这里,我们不需要  。

  然后,我们将覆盖XMLHttpExecutor的executeRequest方法,我们需要作的,就是将WebRequest对象打印在页面上  。代码如下:

  1. function Jeffz$Net$TraceExecutor$executeRequest()  
  2. {  
  3. debug.trace("<b>Request sent at " + new Date() + ":b>");  
  4. debug.dump(this.get_webRequest(), "Request");  
  5. Jeffz.Net.TraceExecutor.callBaseMethod(this, "executeRequest");  

  我在这里使用Debug模式下,为方法起了一个“别名”,在prototype中需要使用一下  。自然,我们也需要调用registerClass,表示类的继承关系  。代码如下:

  1. Jeffz.Net.TraceExecutor.prototype =  
  2. {  
  3. executeRequest : Jeffz$Net$TraceExecutor$executeRequest  
  4. }  
  5. Jeffz.Net.TraceExecutor.registerClass(Jeffz.Net.TraceExecutor,
    Sys.Net.XMLHttpExecutor); 

  我们可以尝试着使用一下,代码很简单,将HTML和Javascript一并贴出了  。代码如下:

  1. <asp:ScriptManager runat="server" ID="ScriptManager1"> 
  2. <Scripts> 
  3. <asp:ScriptReference Path="Debug.js" /> 
  4. <asp:ScriptReference Path="TraceExecutor.js" /> 
  5. Scripts> 
  6. asp:ScriptManager> 
  7. <asp:UpdatePanel runat="server" ID="UpdatePanel1"> 
  8. <Triggers> 
  9. <asp:AsyncPostBackTrigger ControlID="btnRefresh" /> 
  10. Triggers> 
  11. <ContentTemplate> 
  12. <%= DateTime.Now.ToString("r") %> 
  13. ContentTemplate> 
  14. asp:UpdatePanel> 
  15. <asp:Button runat="server" ID="btnRefresh" Text="Refresh"/> 
  16. <script language="javascript"> 
  17. Sys.Net.WebRequestManager.set_defaultExecutorType("Jeffz.Net.TraceExecutor");  
  18. script>  

  以上介绍ASP.NET中的WebRequestExecutor