网页教学网
 当前位置: 网页教学网 >> 网络编程 >> ASP.NET编程技术 >> WebService 服务和ajax 使用教程一例
[ HTML ] [ FW ] [ DW ] [ FP ] [ JS ] [ XML ] [ CSS ] [ 图象 ] [ FLASH ] [ .NET ] [ ASP ] [ JSP ] [ PHP ] [ 数据 ] [ 系统 ] [ 安全 ] [ 素材 ] [ 建站 ] [ 主机 ] [ 入门 ] [ 技巧 ]

WebService 服务和ajax 使用教程一例

http://www.webjx.com  更新日期:2007-09-17 07:53  出处:网页教学网  作者:
  题外话: .WebService技术已经有好几年的历史了,关于基础的理论知识,此处省去,不说了。最近被炒了的ajax技术也被滥用的很是严重,至于细节,不是我说的重点。

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

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

=======================
本文全部源码:
点击这里下载源文件
====================
  本文既不说明ajax的弱,也不说WebService的强大,只是通过一个例子说明了如何使用WebService技术和ajax技术.

 
 
  我通过实例“用户登陆”展示How.
  在本地建立一个虚拟目录UserApp。

  先创建一个webservice:

  

namespace Cjjer{
using System;
using System.Web.Services;
[WebService (Name="WebsCjjer",Description="一个验证用户登陆的web服务",Namespace="http://www.cjjer.com/webs/")]
public class UserService{
    [WebMethod (Description ="输入用户名和密,返回权限Int值,0表示失败",MessageName="Login")]
    public int Login(string UserName,string UserPassword){
        return User.Check(UserName,UserPassword);
    }


};
}


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

   csc编译掉,放入bin目录,然后login.asmx文件:
   
<%@WebService Class="Cjjer.UserService"%>

 
   我先不说验证的细节,我们先假设User.Check()返回的是用户级别,0表示验证失败.
 
  现在在URL中输入地址,访问:如图
  
  WebService 服务和ajax 使用教程一例

  点击login:
 WebService 服务和ajax 使用教程一例

  输入正确的用户名和密码,然后点击调用:
WebService 服务和ajax 使用教程一例

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


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

 还有很多方式:


SOAP(最低级的)

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

HTTP GET

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

GET /userapp/login.asmx/Login?UserName=string&UserPassword=string HTTP/1.1
Host: s


return:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<int xmlns="http://www.cjjer.com/webs/">int</int>


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

POST /userapp/login.asmx/Login HTTP/1.1
Host: s
Content-Type: application/x-www-form-urlencoded
Content-Length: length

UserName=string&UserPassword=string


return:
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<int xmlns="http://www.cjjer.com/webs/">int</int>


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

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

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

wsdl /l:cs /out:WebsCjjer.cs /namespace:Webs /urlkey:WebsUser /nologo http://s:81/userapp/login.asmx?wsdl


得到WebsCjjer.cs源文件。

注意:/urlkey:WebsUser表示是URL可以是从web.config文件的WebsUser获取,这样做是避免硬编码,看看WebsCjjer.cs
    
.......
    public WebsCjjer() {
            string urlSetting = 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>
            <add name="HttpPost"/>
            <add name="HttpGet"/>
        </protocols>
    </webServices>


  就是代理许可.

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


void OnLogin(Object s,EventArgs e){
    Webs.WebsCjjer Ws_App = new Webs.WebsCjjer();
    returnint.Text = Ws_App.Login(MyUserName.Text,MyPassword.Text).ToString();
}


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


  看看如下效果:
登陆界面:
 WebService 服务和ajax 使用教程一例 


如果登陆成功:
WebService 服务和ajax 使用教程一例

否则;
WebService 服务和ajax 使用教程一例

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


function ajaxLogin(){
    var WebsUrl = 'http://s:81/userapp/login.asmx/Login?';
    if(!CheckLoadfocus(document.all.MyUserName)  )    {    
        alert('用户名不合法,请返回');
        return false;
    }else if (!CheckLoadfocus(document.all.MyUserName)  )    {    
        alert('密码不合法,请返回');
        return false;
    }
    var UrlStr = WebsUrl +'UserName='+document.all.MyUserName.value+'&UserPassword='+document.all.MyPassword.value;
    AjaxLogin(UrlStr);
    return false;
}
function CheckLoadfocus(thise){
    var sReg='([a-zA-Z0-9]+){3,}$';
    var reg = new RegExp(sReg,"i");
    try{
        if(!reg.test(thise.value)){
            thise.value ='admin';
            thise.style.background='#FFFFBF';
            thise.focus();
            thise.select();
            alert('提交不合法,请返回');
            return false;
        }
    thise.select();
    thise.style.background='#FFF';

    }catch(e){}
    return true;
}

function AjaxLogin(file){
  var xmlObj = null;
  if(window.XMLHttpRequest){
      xmlObj = new XMLHttpRequest();
  } else if(window.ActiveXObject){
      xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
      return;
  }

  xmlObj.onreadystatechange = function(){
    if(xmlObj.readyState == 4){
        var rstr;
        var mylevl = 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服务更加具有广泛的使用前景,它在异步传输,分布式数据处理上占有很重要的一席之地,我只据了一个小小的例子以说明这一点。


 关于作者:老农,专注web编程和数据库技术。
关键词:WebService,ajax
推荐给好友】【关闭】【收藏本文
最新五条评论
查看全部评论
评论总数 0
您的评论
用户名: 新注册) 密 码: 匿名:
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为