最大的網站源碼資源下載站,
本文示例源代碼或素材下載
題外話:.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服務更加具有廣泛的使用前景,它在異步傳輸,分布式數據處理上占有很重要的一席之地,我只據了一個小小的例子以說明這一點。
新聞熱點
疑難解答
圖片精選