WebService服务和ajax 使用教程一例

作者:网络 来源:佚名 更新时间:2008-11-07 01:53:44 点击:

最大的网站源码资源下载站,

  本文示例源代码或素材下载

  题外话:.webservice技术已经有好几年的历史了,关于基础的理论知识,此处省去,不说了。最近被炒了的ajax技术也被滥用的很是严重,至于细节,不是我说的重点。

  ajax技术的入门比较低,javascript和xml的一点利用,个人以为没啥含量,不能在根本上解决企业的需求或者问题,在安全性,线路传输的低级等方面都有致命的问题.

  为什么要把webservice和ajax放一起,原因很简单,两者的共同点是xml,准确的来说是经常按照同一数据协议--------xml.

  本文既不说明ajax的弱,也不说webservice的强大,只是通过一个例子说明了如何使用webservice技术和ajax技术.

  我通过实例“用户登陆”展示how.

  在本地建立一个虚拟目录userapp。

  先创建一个webservice:

namespacecjjer{
usingsystem;
usingsystem.web.services;
[webservice(name="webscjjer",description="一个验证用户登陆的web服务",namespace="http://www.cjjer.com/webs/")]
publicclassuserservice{
  [webmethod(description="输入用户名和密,返回权限int值,0表示失败",messagename="login")]
  publicintlogin(stringusername,stringuserpassword){
    returnuser.check(username,userpassword);
  }
};
}

  我们暂时不看细节,注意这是这个class有头webservice,标记了这是一个web服务.

  csc编译掉,放入bin目录,然后login.asmx文件:

  <%@webserviceclass="cjjer.userservice"%>

  我先不说验证的细节,我们先假设user.check()返回的是用户级别,0表示验证失败.

||| 注册会员,创建你的web开发资料库,

  现在在url中输入地址,访问:如图

  webservice服务和ajax 使用教程一例

  点击login:

  webservice服务和ajax 使用教程一例

  输入正确的用户名和密码,然后点击调用:

  webservice服务和ajax 使用教程一例

  如果不是正确的用户名和密码,将int节点值是0.

  我们本地的调用是在soap操作.

  还有很多方式:

  soap(最低级的)

  soap的这里不说,以后会详细说,我这里注意看的是get和post方式:

  httpget

  面是一个httpget请求和响应示例。所显示的占位符需要由实际值替换。

  get/userapp/login.asmx/login?username=string&userpassword=stringhttp/1.1

  host:s

  return:

http/1.1200ok
content-type:text/xml;charset=utf-8
content-length:length
<?xmlversion="1.0"encoding="utf-8"?>
<intxmlns="http://www.cjjer.com/webs/">int</int>

  httppost

  下面是一个httppost请求和响应示例。所显示的占位符需要由实际值替换。

post/userapp/login.asmx/loginhttp/1.1
host:s
content-type:application/x-www-form-urlencoded
content-length:length
username=string&userpassword=string

|||

  return:

http/1.1200ok
content-type:text/xml;charset=utf-8
content-length:length
<?xmlversion="1.0"encoding="utf-8"?>
<intxmlns="http://www.cjjer.com/webs/">int</int>

  我们可以输入url的地址,或者post的action,就可以访问和提交获取结果了.

  此处可以选择的操作其实也很多,使用屏幕清理技术,还可以用xml的处理框架提交信息的结果,也可以用其他技术,不说了,反正都是貌似需要几十行或者比我下面多一些处理。

  我说的是使用sdk的工具wsdl工具处理代理的web服务.

  wsdl/l:cs/out:webscjjer.cs/namespace:webs/urlkey:websuser/nologohttp://s:81/userapp/login.asmx?wsdl

  得到webscjjer.cs源文件。

  注意:/urlkey:websuser表示是url可以是从web.config文件的websuser获取,这样做是避免硬编码,看看webscjjer.cs

.......
  publicwebscjjer(){
      stringurlsetting=system.configuration.configurationsettings.appsettings["websuser"];
      if((urlsetting!=null)){
        this.url=urlsetting;
      }
      else{
        this.url="http://s:81/userapp/login.asmx";
      }
    }
.......

  :

  为了能被其他的人访问,需要加入如下代码到web.config:

  <system.web>
  <webservices>
    <protocols>
      <addname="httppost"/>
      <addname="httpget"/>
    </protocols>
  </webservices>

|||
  • 网站运营seo文章大全
  • 提供全面的站长运营经验及seo技术!
  •   就是代理许可.

      编译了这个类,到bin,使用的时候如下:

    voidonlogin(objects,eventargse){
      webs.webscjjerws_app=newwebs.webscjjer();
      returnint.text=ws_app.login(myusername.text,mypassword.text).tostring();
    }

      这样,直接能返回结果,不需要我们自己正则或者xml处理,不需要知道验证的细节。

      看看如下效果:

      登陆界面:

      webservice服务和ajax 使用教程一例

      如果登陆成功:

      webservice服务和ajax 使用教程一例

      否则;

      webservice服务和ajax 使用教程一例

      ajax需要的代码可能要稍微多一点:

    functionajaxlogin(){
      varwebsurl='http://s:81/userapp/login.asmx/login?';
      if(!checkloadfocus(document.all.myusername) )  {  
        alert('用户名不合法,请返回');
        returnfalse;
      }elseif(!checkloadfocus(document.all.myusername) )  {  
        alert('密码不合法,请返回');
        returnfalse;
      }
      varurlstr=websurl+'username='+document.all.myusername.value+'&userpassword='+document.all.mypassword.value;
      ajaxlogin(urlstr);
      returnfalse;
    }
    functioncheckloadfocus(thise){
      varsreg='([a-za-z0-9]+){3,}$';
      varreg=newregexp(sreg,"i");
      try{
        if(!reg.test(thise.value)){
          thise.value='admin';
          thise.style.background='#ffffbf';
          thise.focus();
          thise.select();
          alert('提交不合法,请返回');
          returnfalse;
        }
      thise.select();
      thise.style.background='#fff';
      }catch(e){}
      returntrue;
    }
    functionajaxlogin(file){
     varxmlobj=null;
     if(window.xmlhttprequest){
       xmlobj=newxmlhttprequest();
     }elseif(window.activexobject){
       xmlobj=newactivexobject("microsoft.xmlhttp");
     }else{
       return;
     }
     xmlobj.onreadystatechange=function(){
      if(xmlobj.readystate==4){
        varrstr;
        varmylevl=parseint(xmlobj.responsexml.getelementsbytagname('int')[0].firstchild.data);
        if(mylevl>0){
          rstr=('登陆成功,权限是'+mylevl);
        }else{
          rstr=('登陆失败');
        }
        alert(rstr);
      }
      }
      xmlobj.open('get',file,true);
      xmlobj.send('');
     }

      总结:就着样,如果发布了web服务,就可以使用wsdl创建代理类,然后获取数据,或者使用ajax获取,两者在简单的功能实现上ajax可能在不支持.net的系统可以实现一些功能,但应对企业级的需求,比方二进制对象传输,安全性要求比较高的需求等。web服务注重的是公开服务内容并使用,ajax注重的是或者xml的数据,在长远的开来,web服务更加具有广泛的使用前景,它在异步传输,分布式数据处理上占有很重要的一席之地,我只据了一个小小的例子以说明这一点。