最大的网站源码资源下载站,
本文示例源代码或素材下载
题外话:.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中输入地址,访问:如图
点击login:
输入正确的用户名和密码,然后点击调用:
如果不是正确的用户名和密码,将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>
就是代理许可.
编译了这个类,到bin,使用的时候如下:
voidonlogin(objects,eventargse){
webs.webscjjerws_app=newwebs.webscjjer();
returnint.text=ws_app.login(myusername.text,mypassword.text).tostring();
}
这样,直接能返回结果,不需要我们自己正则或者xml处理,不需要知道验证的细节。
看看如下效果:
登陆界面:
如果登陆成功:
否则;
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服务更加具有广泛的使用前景,它在异步传输,分布式数据处理上占有很重要的一席之地,我只据了一个小小的例子以说明这一点。
新闻热点
疑难解答
图片精选