zoukankan      html  css  js  c++  java
  • .NET 世界中的远程脚本

    以前在开发ASP程序时,根据客户的要求,不能使用刷新页面要对数据进行更新。就使用当时比较新的方法(Microsoft Remote Scripting)。还记得那个 Rs.asp文件吗?呵呵,我们来回顾一下老的调用方法:
      有三个文件:
       Rs.asp :在服务器端进行引用,来完成服务器端的初始化工作
       Rs.Htm :其实它是一个JavaScript 脚本文件,使用完成请求分析数据
       Rsproxy.class :是一个Java 小程序,就是通过它来完成客户端与服务端的通信
      -------- 服务端文件 Server.asp----
      <%@ LANGUAGE=VBSCRIPT %>
      <!--#include file="_ScriptLibrary/rs.asp"--> //必须要包含这个文件
      <% RSDispatch %> //对 Remote Scripting 进行初始化,必须第一个调用
      <SCRIPT Language=JavaScript RUNAT=SERVER>
      function Description(){
       this.myFunction = myFunction; //暴露myFunction函数
      }
      public_description = new Description();
      function myFunction(strInput, numLength) //在这里实现这个myFunction 函数
      {
       var objConn = Server.CreateObject("ADODB.Connection");
       objConn.Open("dsn=pubs;uid=sa;pwd=;Network=DBMSSOCN");
       var objRS = Server.CreateObject("ADODB.Recordset");
       objRS.MaxRecords = numLength;
       objRS.Open("SELECT au_lname, au_fname FROM Authors Where (au_lname + ', ' + au_fname) >= '" + strInput + "' ORDER BY au_lname,au_fname", objConn, 0, 3);
       var tmpMsg = new String;
       tmpMsg.value = "";
       while (!objRS.EOF){
       tmpMsg.value = tmpMsg.value + objRS("au_lname") + ", " + objRS("au_fname") + ":";
       objRS.MoveNext();
       }
       objConn.Close();
       return tmpMsg.value;
      }
      </SCRIPT>
      --------------客户端 RSClient.HTM ------
      <HTML>
      <HEAD>
      <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
      <TITLE>Servin' It Up with Remote Scripting</TITLE>
      <BODY onload="refresh_list()"> //当页面载入时调用函数 refresh_list()
      <SCRIPT Language="JavaScript" src="_ScriptLibrary/rs.htm"> //这是客户端必须的引入
      </SCRIPT>
      <H2>Address Book Sample</H2>
      <FORM id=form1 name=form1>
      <INPUT type="text" size="50" id=Myname name=MyName onkeyup=refresh_list()><br>
      <SELECT id=NameList name=NameList size=10>
      - One Moment Please -----</SELECT>
      </FORM>
      <SCRIPT LANGUAGE=javascript>
      <!--
      RSEnableRemoteScripting(); //初始化客户端脚本,建立连接对象
      function refresh_list(){
       var serverURL = "server.asp"; //服务器端文件
       var DisplayLength = 10
       document.form1.NameList.length = 0
       document.form1.NameList.length = DisplayLength
       var inValue = document.form1.MyName.value;
       var myVar = RSExecute(serverURL, "myFunction", inValue, DisplayLength);//进行远程调用
       var myArray = myVar.return_value.split(":"); //返回值只能是String类型
       for (i = 0; i < 10; i++){ //下面对得到的数据进行分析
       var myOpt = new Option
       myOpt.value = myArray[i];
       myOpt.text = myArray[i];
       if (i < myArray.length){
       document.form1.NameList.options[i] = myOpt;
       }
       }
       document.form1.NameList.options[0].selected = true;
      }
      //-->
      </SCRIPT>
      </BODY>
      </HTML>
      
      
      
       这就是完整的RemoteScripting 的调用过程,不过有两个非常不好的地方那就是。RS使用的是 HTTP Get方法来进行数据传送。这样有了一个2K的数据限止。也就是说你的参数总的长度不能超过2K。还有一个不好是客户端必须有JVM运行机。在Windows XP 中系统已经不是默认安装了,所以会出现无法运行的问题。
       而下用使用Web Service 就已经很好地解决了这些方面的问题。
      
      在Web Service只用到了一个Web Service 服务和一个 webservice.htc 文件
      先我们创建一个 Web Service ,利用VS.net 很容易就能完成。
      -----------Web 服务 WebServiceTest.asmx------
      using System;
      using System.Web.Services;
      public class Service1 : System.Web.Services.WebService
      {
       [WebMethod]
       public string HelloWorld()
       {
       return "Hello World";
       }
      }
      -----------客户端文件 Client.html---
      <HTML>
      <Body>
      <div id="displayHello"></div>
      <div id=service style="BEHAVIOR: url(webservice.htc)"></div> //这是引入JavaScript库
      <script language="JavaScript">
       service.useService("WebServiceTest.asmx?WSDL","svrHelloWorld"); //创建svrHelloWorld属性
       //在 WebServiceTest Web 服务上调用 HelloWorld 方法
       var iCallID = service.svrHelloWorld.callService(showHelloWorld,"HelloWorld");
       function showHelloWorld(result){
       //显示Hello World
       displayHello.innerHTML = result.value;
       }
      </script>
      </Body>
      </HTML>
      
       因为Web Service能够使用HTTP POST方法,那就没有了2K的限止。因为使用的是XML,支持通过浏览器通信,所以不需要数据传送层。当然也可以很容易地通过防火墙。完美的Web 程序就是这样建立起来的。:)
  • 相关阅读:
    nyoj 117 求逆序数 (归并(merge)排序)
    2018年四川理工学院软件工程考试大纲(软件需求分析)
    2018年四川理工学院软件工程考试大纲(软件计划与可行性研究)
    hdu 1166 敌兵布阵 (线段树、单点更新)
    hdu 1754 I Hate It (线段树、单点更新)(PS:ios::sync_with_stdio(false)可以加快cin、cout的读取写出速度)
    周末手撸管理系统(一)
    drf源码save以及response
    drf框架serializers中ModelSerializer类简化序列化和反序列化操作
    drf框架序列化和返序列化
    django模型中有外键关系的表删除相关设置
  • 原文地址:https://www.cnblogs.com/lzhdim/p/1345908.html
Copyright © 2011-2022 走看看