在前面的<<基于WEBSERVICE的課件系統(1)>>(
http://www.cnblogs.com/jackyrong/archive/2005/01/28/99025.html
)
和<<基于WEBSERVICE的課件系統(2)>>(
http://www.cnblogs.com/jackyrong/archive/2005/01/28/99027.html
)中,回顧了當初
自己畢業設計中,自己實現的一個課件搜索系統的情況,這是為了模擬實現。NET和JAVA的WEBSERVICE互操作性而搞的,下面繼續貼出其他部分,以反省當初自己設計的不足。
4.5
?
.NET客戶端――Java端WebService的設計
反過來,我也設計了一個用
Java
寫的
WebService
和一個由
asp.net
寫的
.Net
客戶端,其中用
Java
寫的
WebService
對外提供
WebService
接口,供查詢課件所用。而由
asp.net
寫的
.Net
客戶端則模擬其他網站的課件搜索模塊。
?
主要設計方法思想:
1)
Java
端
WebService
的設計
????
??
利用
Axis
,可以很方便地將一個
Java
的類文件發布為
WebService,
只需要將
Java
的類文件改后綴名為
.jws,
之后運行,
Axis
就會將類文件編譯,生成相應的
wsdl
。其設計思想為:
???
,首先在數據庫中對輸入的參數進行數據庫查詢,如果找到結果,
則對記錄集中的每條數據提取出來,生成指定格式的
XML
。如果沒有找到任何結果,則返回一個空的字符串。由于在
WebService
中,
XML
是傳播的最好介質,所以我用字符串組合
xml
的形式,避免了用
Java
或者
.Net
中各種復雜的數據類型在
WebService
中傳遞遇到的不一致性和復雜性的問題。
??
編譯程序,就可以用
http://localhost:8080/axis/msearchjavaws.jws
生成
WSDL
文件。
2) .Net
客戶端的設計
?
?
首先使用
vs.net 2002中的UDDI自動搜索工具,將由Java端生成的WSDL文件導入,系統自動生成代理類。之后就可以利用該代理類來調用WebService。
主要算法:
<o:p></o:p>
初始化 WebService代理類,引入WebService;<o:p></o:p>
??? 初始化xmldocument類,為解釋xml做準備;<o:p></o:p>
??? 將客戶端的查詢條件組合后形成sql查詢語句;<o:p></o:p>
調用WebService;<o:p></o:p>
將返回的 WebService結果以字符串流的形式賦值給字符串;<o:p></o:p>
if (字符串為空)
{<o:p></o:p>
????????? 輸出暫時沒結果<o:p></o:p>
} <o:p></o:p>
else<o:p></o:p>
{
初始化dataset;<o:p></o:p>
用程序生成
將WebService返回的字符串讀入dataset;<o:p></o:p>
????
讀取xml中的<kejian>標記,形成結點集;
?
for (I=0;I<結點集個數-1;I++)<o:p></o:p>
{<o:p></o:p>
逐個結點解釋 XML,將XML中的每個結點數據提取出來;<o:p></o:p>
<o:p></o:p>
}<o:p></o:p>
用程序動態生成新的數據表 kejian;<o:p></o:p>
??? 將xml中已解釋的每個結點映射到kejian表中;<o:p></o:p>
將 kejian表的數據源綁定到asp.net中顯示數據的datagrid控件。<o:p></o:p>
???
顯示搜索結果;
??
在上面的算法中,由于
asp.net中使用的是服務端控件datagrid,所以綁定到它上面的是dataset類型的數據。在讀取Java端的WebService返回的xml字符串后,必須將字符串流用.Net中的xmldocument類讀取,轉變為.Net中能夠接受的dataset形式。其中比較關鍵的是要將XML中的每個結點映射為數據表中的每一條記錄
5.1
在移動設備中使用
WebService
???
WebService
的使用十分廣泛,在移動設備中也可以通過調用
WebService
實現很多功能。在這次的設計中,我將原來系統中的日歷事件提醒功能移植到移動設備(手機),使得用戶通過在手機上登陸,就可以查看當天有哪些事件需要提醒。具體設計如下:
???
在原先我們小組設計的系統中,有一項是事件日歷提醒功能。用戶可以在登陸系統后,選擇日歷中某天后,可以設定某天中需要提醒的事件,設定需要提前幾天提醒。這樣,當用戶再次登陸系統后,如果當天有事件提醒,就會在系統中顯示出來,提醒用戶要注意。而由于遠程教育的特殊性,以及科技通訊技術的日益發達,用戶可以通過手機登陸系統,輸入自己的用戶名和密碼,在登陸后,如果當天有事件需要提醒的話,就會在手機上顯示。系統的架構圖為:
??
?
由于條件的限制,這次我只能采用
Nokia 6210
模擬器進行模擬,該模擬器能完全模擬實際手機的尺寸大小和顯示效果。客戶端的開發全部采用微軟的
VS.NET 2002
及移動工具開發包。而整個過程都是調用
Java
端的
WebService
的,由于
WebService
傳遞的是
XML,
因此十分適宜在移動設備上使用。下面是有關的主要界面
:
?
當用戶在手機上輸入地址后,會出現圖
1
的界面。之后用戶輸入用戶名和密碼,此時客戶端會調用登陸驗證的
WebService,
如果用戶輸入正確,就會繼續調用日歷提醒的
WebService,
該
WebService
調用后臺數據庫,查看該用戶當天是否有事件提醒,如果有的話則返回要提醒的事件。由于手機屏幕比較小的緣故,所以每屏只顯示一到兩條,用戶可以通過手機翻頁功能查看下一條事件。當查看每件事件的具體內容時,會出現圖
2
的界面。
???
由此可以看出,
WebService
的精髓在于,通過
XML
,可以實現不同信息設備之間的資源共享。特別是在于移動設備方面,通過
XML WebService
,可以使編程變得簡單,而且擴展性十分好,能適應不同設備的大小。因為移動設備是“瘦”客戶端的緣故,所以就應該把邏輯計算等重要部分放到服務端去做。而服務端系統操作平臺的多樣性,開發語言的多樣性使得問題變得復雜。這些只有通過
WebService
去解決。
<o:p></o:p>
? }<o:p></o:p>
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
