摘要:在Visual Studio.NET2005 集成開發(fā)環(huán)境下,利用C#語言,研究了在移動設(shè)備(如手機)上,通過WAP瀏覽器,設(shè)計與實現(xiàn)信息查詢操作,并研究如何使用VS.NET所帶的仿真器,測試系統(tǒng)的性能和效果。
關(guān)鍵詞:移動應(yīng)用程序;仿真器;ASP.NET
中圖分類號:TP391文獻標識碼:A文章編號:1009-3044(2009)24-6742-03
Research and Development of Mobile Web Application Based on ASP.NET
SUN Jian-mei, GU Ming-xia
(Yancheng Teacher's College, Yancheng 224002, China)
Abstract: Under the VS.NET 2005 integrated development environment ,using C# language, study how to design and implement the operation of information query on the mobile devices (eg mobile phone) through WAP browser. And study how to use emulator of the VS.NET to test the performance and effectiveness of the system.
Key words: mobile application; emulator; ASP.NET
萬維網(wǎng)上大多數(shù)網(wǎng)頁都過于復雜,無法顯示在目前的移動設(shè)備上。ASP.NET移動設(shè)計器擴展了Microsoft Visual Studio集成開發(fā)環(huán)境。ASP.NET能夠自動調(diào)整應(yīng)用程序的呈現(xiàn)形式,以適應(yīng)不同的設(shè)備。本文以一個有簡單用戶驗證,具有成績和天氣查詢功能的移動Web應(yīng)用開發(fā)為例,研究ASP.NET移動Web應(yīng)用的開發(fā)技術(shù)。
1 移動Web的相關(guān)技術(shù)支持
ASP.NET提供了一個專用于移動Web開發(fā)的System.Web.Mobile命名空間。可以從MobilePage基類中創(chuàng)建網(wǎng)頁并從System.Web.Mobile命名空間中添加控件。開發(fā)遵循標準的.NET 事件驅(qū)動模型,讓應(yīng)用程序?qū)τ脩粽埱蟆粹o單擊等做出響應(yīng)。
1.1 ASP.NET Web移動應(yīng)用程序的結(jié)構(gòu)
ASP.NET移動Web應(yīng)用程序開發(fā)與傳統(tǒng)的Web應(yīng)用程序開發(fā)遵循同一模式,但許多移動設(shè)備的屏幕區(qū)域都比桌面監(jiān)視器小,因此,專門為移動設(shè)備瀏覽器開發(fā)的頁允許將呈現(xiàn)邏輯細分為較小的部分,從而可針對設(shè)備的顯示區(qū)域和輸入硬件更好地工作。
1.2 選擇自定義適配器或移動控件
對于面向移動設(shè)備的頁,必須使用移動Web服務(wù)器控件并創(chuàng)建繼承MobilePage的頁。此外,用于主要設(shè)備及其標記語言的移動控件設(shè)備適配器也已經(jīng)存在。在主要標記語言不斷發(fā)展的同時,Microsoft將繼續(xù)為移動Web服務(wù)器控件提供適配器更新。
在普通的ASP.NET Web窗體頁上,每頁只能包含一個窗體。但是由于移動設(shè)備的屏幕通常較小,因此在一個移動Web窗體頁上允許定義多個窗體控件。這樣有幾個好處:
1) 避免了大量的小頁,從而可以控制Web站點的復雜性。
2) 可以像組織桌面Web應(yīng)用程序那樣來組織移動Web應(yīng)用程序,因為可以處理與包含多個窗體的單個移動頁。
3) 可以利用移動Web窗體所提供的頁級功能,例如自動維護頁狀態(tài)(稱為視圖狀態(tài))以及適應(yīng)能夠在單個響應(yīng)中接收多個屏幕的設(shè)備。
當客戶端第一次訪問某頁時,默認情況下顯示第一個窗體。可以通過設(shè)置移動頁的ActiveForm屬性以編程方式導航到其他窗體,也可以允許用戶通過使用Link控件導航到窗體。
1.3 設(shè)備篩選器
要創(chuàng)建并使用設(shè)備特定的內(nèi)容,必須首先為應(yīng)用程序配置一組設(shè)備篩選器。ASP.NET頁框架使用這些設(shè)備篩選器,為目標設(shè)備選擇設(shè)備特定的內(nèi)容。設(shè)備篩選器不一定是排他性的,一個設(shè)備可以匹配多個篩選器。要定義設(shè)備篩選器,需要在應(yīng)用程序的web.config文件中創(chuàng)建
2 配置Pocket PC 2003 SE設(shè)備仿真器的網(wǎng)絡(luò)設(shè)置
設(shè)備仿真器可以給移動應(yīng)用提供一個經(jīng)濟、方便的測試方式。下面介紹Pocket PC 2003 SE設(shè)備仿真器的配置方式。
1) 要求安裝虛擬網(wǎng)卡驅(qū)動程序Virtural PC 2007。安裝成功后便可以在本地網(wǎng)絡(luò)連接屬性對話框中看到虛擬網(wǎng)卡。
2) 要求在Visual Studio 2005中配置仿真器參數(shù)。在Visual Studio 2005選擇:工具→選項→設(shè)備工具→設(shè)備,選擇“Pocket PC 2003 SE仿真程序”,點擊屬性按鈕,進入模擬器配置界面,在“傳輸”下拉框中選擇“TCP連接傳輸”。最后點擊仿真器選項按鈕,進入“仿真程序?qū)傩浴睂υ捒颍c選網(wǎng)絡(luò)標簽頁,勾選標簽頁中的“啟用NE2000 PCMCIA網(wǎng)絡(luò)適配器并綁定到”選項,同時選擇“Virtual Machine Network Services Driver”對應(yīng)的下拉列表項。
3) 配置Pocket PC 2003 SE仿真器參數(shù)。在仿真器中選擇:開始→設(shè)置→連接→網(wǎng)卡,進入網(wǎng)卡配置界面,點選“NE2000兼容Ethernet驅(qū)動程序”,對網(wǎng)卡的具體配置也如圖1所示。192.168.0.1為局域網(wǎng)路由器IP地址,192.168.0.10為運行仿真器的PC的IP地址。
4) 在仿真器窗口中選擇菜單:文件→配置,點選網(wǎng)絡(luò)標簽頁,勾選標簽頁中的“啟用NE2000 PCMCIA網(wǎng)絡(luò)適配器并綁定到”選項。最后軟啟動一次仿真器。
3 基于ASP.NET的移動Web應(yīng)用的具體實現(xiàn)
下面以一個帶有簡單用戶驗證,具有成績和天氣查詢功能的移動Web應(yīng)用開發(fā)為例,探討ASP.NET的移動Web應(yīng)用的開發(fā)技術(shù)。
3.1 用戶登錄窗體的實現(xiàn)
1) 用戶登錄窗體的功能及窗體設(shè)置
登錄窗體的主要功能是提供給用戶的登錄,輸入密碼、驗證碼以后進行驗證,如果驗證成功就進入相應(yīng)的頁面繼續(xù)操作,若驗證失敗,就提示相應(yīng)的信息告知用戶。
在VS.NET開發(fā)環(huán)境中新建普通站點后,刪掉系統(tǒng)產(chǎn)生的Default.aspx網(wǎng)頁,在解決方案資源管理器窗口中右單擊項目名稱,添加新項,選擇移動Web窗體,名稱為Default.aspx。生成的主頁,自帶一個Form控件。Form控件中添加一個Label控件,提示相應(yīng)信息。兩個TextBox控件,用來輸入密碼和驗證碼,一個RequiredFieldValidator控件,驗證用戶輸入的密碼密碼是否等于初始給定的密碼。一個Image控件,用來產(chǎn)生驗證圖片,一個Command控件,用來完成登錄驗證功能。
2) 登錄窗體的代碼實現(xiàn)
本窗體中隨機驗證碼由另外一個頁面ValidateCode.aspx提供,語句ImageUrl=\"ValidateCode.aspx\"實現(xiàn)關(guān)聯(lián)。
ValidateCode頁面的主要方法。
protected void Page_Load(object sender, EventArgs e)
{string checkcode = GenerateCheckCode(4);//這里的數(shù)字4表顯示的是4位驗證字符串
Session[\"checkcode\"] = checkcode;// 用于頁面之間的傳值
CreateCheckCodeImage(checkcode); //生成隨機數(shù)對應(yīng)的圖像
}
private string GenerateCheckCode(int VcodeNum)// 生成隨機數(shù)函數(shù)
private void CreateCheckCodeImage(string checkcode)// 生成圖像函數(shù)
登錄窗體本身登錄按鈕的處理程序如下:
RequiredFieldValidator1.InitialValue = \"123456\"; //給定初始化密碼
if (Page.IsValid)
{string checkcode;
checkcode = Session[\"checkcode\"].ToString();
ViewState[\"checkcode\"] = checkcode;
if(this.TextBox8.Text == ViewState[\"checkcode\"].ToString() TextBox3.Text == RequiredFieldValidator1.InitialValue)// 判斷用戶輸入的密碼和驗證碼是否正確
{ this.ActiveForm = Form1;}
Else
{Label25.Text = \"密碼或驗證碼錯誤!\";}
}
其運行界面如圖2所示。
3.2 天氣查詢模塊的實現(xiàn)
1) 查詢窗體的功能及窗體設(shè)置
查詢窗體主要功能是通過調(diào)用WebService方便用戶查詢當日的天氣。
窗體使用兩組SelectionList和Command控件分別用于獲取省份城市和當日天氣,使用多個Label和Image控件,用來顯示氣溫、概況、風向、風力和天氣圖標等。
2) 查詢窗體的核心代碼如下所示:
com.ayandy.www.Service obj = new com.ayandy.www.Service();// 調(diào)用WebService
if(!Page.IsPostBack)// 在頁面首次加載時綁定省份城市及天氣
{BindPro();BindCity();BindWeather();}
protected void BindPro()// 獲取省份
{string[] pro = obj.getSupportProvince();
for (int i = 1; i <= Int32.Parse(pro[0]); i++)// 動態(tài)添加SelectionList的項
{SelectionList4.Items.Add(new MobileListItem(pro[i].ToString(), pro[i].ToString()));}}
// 獲取城市
protected void BindWeather()// 獲取天氣
本頁面也是移動Web開發(fā)特別要注意的是SelectionList控件沒有自動回發(fā)功能,需要通過Command控件來回發(fā),因此必須在Command控件中添加類似的代碼。
窗體運行界面如圖3所示。
3.3 成績查詢功能實現(xiàn)
在本應(yīng)用,要求實現(xiàn)成績查詢。為此可以在SQL 2005 EXPRESS創(chuàng)建一個名為Database.mdf的數(shù)據(jù)庫。并在數(shù)據(jù)庫中添加表GKFS,表中定義關(guān)于成績的相關(guān)字段。此功能的實現(xiàn)需要兩個窗體,一個窗體用來輸入準考證號等,一個用來顯示查詢的成績。
成績查詢體現(xiàn)了移動Web數(shù)據(jù)庫處理技術(shù)。核心代碼如下:
SqlConnection conn = new SqlConnection(); //新建數(shù)據(jù)庫連接
conn.ConnectionString = @\"Data Source = .\\SQLEXPRESS; //連接到數(shù)據(jù)庫
AttachDbFilename =C:\\Inetpub\\wwwroot\\WebSiteMobile\\App_Data\\成績查詢.mdf;
Integrated Security=True;User Instance=True\";
conn.Open();//打開連接
SqlCommand selecmd = new SqlCommand();//建立命令對象
selecmd.CommandText = \"select * from GKFS where GKFS.zkzh='\" + mzkzh.Trim() + \"' and gkfs.sfzh='\" + msfzh.Trim() + \"'\"; //對數(shù)據(jù)庫的查詢
selecmd.Connection = conn;
SqlDataReader adatareader = selecmd.ExecuteReader();//生成SqlDataReader對象
if (! adatareader.HasRows)
{this.List1.Items.Clear();
this.List1.Items.Add(\"沒有找到匹配的紀錄\");
this.List1.Items.Add(\"請確認身份證號與準考證號是否正確? \");
}
while (adatareader.Read())
{
this.List1.Items.Clear();
this.List1.Items.Add(\"查詢結(jié)果如下: \");//在List控件中顯示查詢的結(jié)果
this.List1.Items.Add(\"準考證號: \" + adatareader[\"ZKZH\"]);
...…
}
移動Web應(yīng)用中的數(shù)據(jù)庫技術(shù)和普通Web應(yīng)用相似。
4 小結(jié)
移動Web開發(fā)的需求越來越多,.NET平臺下,移動Web開發(fā)和普通Web開發(fā)本質(zhì)相同,但很多細節(jié)上有自己的特點。本文通過實例闡述了用ASP.NET開發(fā)移動Web 的一般方法和手段。
參考文獻:
[1] 蔣培,王笑梅.ASP.NET Web程序設(shè)計[M].北京:清華大學出版社,2008.
[2] 顏友寧編著..NET Compact Framework 移動開發(fā)指南[M].北京:清華大學出版社,2006.
[3] 李萬寶.ASP.NET技術(shù)詳解與應(yīng)用實例[M].北京:機械工業(yè)出版社,2005.
[4] 叢書編委會.ASP.NET與網(wǎng)站開發(fā)實踐教程[M].北京:清華大學出版社,2005.
[5] 李正希,胡方霞,陳發(fā)吉,等.ASP.NET案例開發(fā)[M].北京:中國水利水電出版社,2005.
[6] 季久峰,梁建全,宋修舵,等.ASP.NET開發(fā)答疑200問[M].北京:人民郵電出版社,2004.