明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP.NET 打造互聯(lián)網(wǎng)未來空間站(1)

[摘要]技術話題如果你已經(jīng)看過我們前面的那些文章, 您有可能已經(jīng)形成了這樣一個想法:.NET是微軟公司非常重要的戰(zhàn)略措施,微軟公司正在花費大量的時間和精力努力營建它。其中,.NET的一個不可缺少的部分是ASP.NET,F(xiàn)在,我們來談一談ASP.NET的體系結構,看看它是如何與.NET的整體架構協(xié)調(diào)工作的,...

技術話題
如果你已經(jīng)看過我們前面的那些文章, 您有可能已經(jīng)形成了這樣一個想法:.NET是微軟公司非常重要的戰(zhàn)略措施,微軟公司正在花費大量的時間和精力努力營建它。其中,.NET的一個不可缺少的部分是ASP.NET。現(xiàn)在,我們來談一談ASP.NET的體系結構,看看它是如何與.NET的整體架構協(xié)調(diào)工作的,以及如何利用ASP.NET開發(fā)大型網(wǎng)站那樣的東西。
我們已經(jīng)做ASP.NET三年了。我們剛開始主要是研究ASP。眾所周知,ASP是個建立網(wǎng)絡應用非常成功的平臺,我們研究ASP主要看看它有些什么東西的確很值得保留,看看在哪些方面,我們可以改進它,于是我們花了一年半的時間進行頭腦風暴式的集體研討,產(chǎn)生想法并開始建設,這樣就產(chǎn)生了ASP.NET。此外,我們最近將ASP+的名字改為ASP.NET。

請問,你們這樣做的確切原因是什么?這樣做又意味著什么?
.NET的起因是多方面的,比如將軟件提升為服務;比如XML和web服務,他們用他們可做到的方式增強了互聯(lián)網(wǎng)的性能。我們稱之為 ASP+的東西是在我們有.NET之前被命名的;一旦.NET名字出來,我們就將它的名字和.NET架構緊密聯(lián)系在一起了。我們可以這么認為,它是ASP的新版本,并且緊緊地依賴于我們談論的.NET構架的所有東西。準確地說是這樣的。
但是,我們認為關于ASP.NET重要的是,它并不是我們拿了來自ASP先前的版本的代碼,將它移植到.NET上,或者與.NET相結合。我們真正從底層創(chuàng)建了它。這是一種徹底不同的代碼,這是在我們花費3年時間所提出新想法的基礎上,是在common language runtime基礎上,是在XML基礎上,是在所有其它.NET技術的基礎上構建的。

我們在上面討論了ASP新的構架,并且命名為ASP.NET,還重新建造了它,這難道意味著如果我是一名ASP程序員,我必須拋棄我學習過的一切,為了適應ASP.NET,必須重新學習一種新思路嗎?

絕對不是的。如果你是一名ASP開發(fā)者,你仍然可以保持你目前的全部技能,并且非常輕易地將它們應用到ASP.NET中。如果你想繼續(xù)按照你原來的風格寫,你可以繼續(xù)使用。如果你想接受最新的編程方式,你可以開始這種體驗。不過,你可以漸漸地做到這一點,你可能會在許多新的特點中使用很多老的編碼風格,并且獲得這兩種風格的最佳優(yōu)點。
嗷,有那些新的特點吸引我前往ASP.NET,為什么我應該向ASP.NET模式轉(zhuǎn)移?
有大量的新特點。
第一,現(xiàn)在全部的語言都是可以編譯的語言。這是,很多ASP用戶渴望得到的事情。他們希望在VB script中得到VB 的這種特征,F(xiàn)在你可以用純粹的Visual Basic語言來編寫你的ASP。NET程序。你也可以選擇許多其他的語言,象C或者JAVA SCRIPT甚至COBOL, 我們已經(jīng)證明COBOL可以運行在ASP內(nèi)部,你可以使用這些更好的語言。你也可以擁有更加簡明和強大的頁面開發(fā)工具。因此,你可以利用很多的方法將對象行為變成TAGS,這樣,你能僅僅把TAGS放在你的頁面上就可以實現(xiàn)很多行為;
第二,你可以不必寫很多的代碼。我們做很多試驗,約400行的ASP代碼我們把它減少到了20行代碼。這樣,可以提高工作效率,創(chuàng)造的更多的價值。
另外,從創(chuàng)建你的網(wǎng)站并且使它能被其他的計算機自動訪問這個角度看, web服務也是一個重要的新特點。例如一個以XML為基礎的web服務的例子,它可以把不同的種類的信息連結到一起,就像電視節(jié)目列表。商務公司在用這種方式其他的商務公司交流信息。所以,能輕松地制作這些基于XML的服務是ASP.NET的另一個重要的部分。
不是SOAP也在提供同樣的事情嗎?
是的,但是,ASP.NET提供了一種非常簡單的方法,建立了基于SOAP的WEB服務。
啊,我知道了。SOAP的一個方面是將你的頁面那些告訴你你的過程所涉及的屬性、方法、事件等小提示包裝起來。因此,ASP.NET在頁面上可以自動完成這些事情。
ASP.NET從根本上提供給這樣一種自動化的方法,你用它建造的不是頁面,:你實際上用它建造的是有獨立的文件擴展名的WEB服務。在這樣的頁面里面,你實際上能定義使網(wǎng)站被調(diào)用的方法,你需要做的一切只是在頁面里寫你的代碼,點擊保存。并且,如果你用瀏覽器點擊那個方法,你將實際上得到所有可以調(diào)用的方法的全部列表,以及一個如何通過SOAP調(diào)用它的方法的描述。你既可以用標準的查詢字符串調(diào)用那些方法,也可以動態(tài)的創(chuàng)建一個com代理對象, 使網(wǎng)絡通信全部自動化,包括全部http調(diào)用,以及XML集合,使用SOAP調(diào)用這個服務就像你調(diào)用一個儲存在服務器里的對象的常規(guī)方法.
就像ASP的產(chǎn)生使得編寫動態(tài)的網(wǎng)頁的工作變得輕而易舉所用的方法相同,ASP.NET的產(chǎn)生真的使寫動態(tài)的WEB服務變得輕而易舉。而實現(xiàn)這一功能,你只需要認真考慮你想寫的代碼和你想處理的數(shù)據(jù)。你根本不必想到XML。(當然,如果你想考慮XML,你能考慮XML。)
你可以寫一個提供類別名字的方法,我可以用它來查詢我的庫存數(shù)據(jù)庫,以及我的其他信息:我的生意怎么樣了,我有多少庫存,我將返還給你一個那個類別的所有產(chǎn)品列表;比如,如果我是食品雜貨商店你向我詢問牛奶的信息,我將給你我賣的牛奶的全部不同的種類信息。
你在ASP+中做這件事(當然,他真的意思是想說ASP.NET)的方法是:你僅僅用VB, C#編寫一個類,該類有一個方法比如說取得類別,并且他還包含類別名字。接下來,它能進行查詢SQL SERVER數(shù)據(jù)庫或任何XML數(shù)據(jù)源,把數(shù)據(jù)帶回。這個過程實際上不必認真考慮轉(zhuǎn)換成XML這些事情。ASP.NET會自動完成XML的轉(zhuǎn)換工作。
因此,我們能夠自動地將一個xml payload轉(zhuǎn)換成一個整數(shù)。然后,如果你返回一個records set的時候,我們將自動地處理records set,并將他變成XML數(shù)據(jù)流。因此,在ASP中不得不做的那些事情:手工分析XML,手工將HTTP的內(nèi)容轉(zhuǎn)換成對 XML payload的訪問并分析他,這些過程都被自動的完成了。我們在其中提供動態(tài)的維護contract能力。Contract主要用來解釋如何調(diào)用web service 的。因此你可以很容易的傳遞這個contract到其他站點上了,其他站點也可以直接對你的站點進行編程。
我們的網(wǎng)站作了一個很有趣的例子,提供了一系列的調(diào)用ASP+(即ASP.NET)的例子,他們提供的web service是:允許其他ASP.NET站點列舉這個站點在某一天寫的所有新的例子。因此那些站點可以訂閱這些服務,并且可以對這些web service編程,規(guī)定他們是一天一次還是一個小時一次獲取網(wǎng)站更新的那些例子的鏈接列表。

這樣說來,對于用戶來講,他們沒有必要考慮與瀏覽器或者web頁面打交道的這些事情,他們直接通過web service就可以訪問互聯(lián)網(wǎng)了?
是的,但是那將是web service的美好的遠景,那時我們將會認識到,互聯(lián)網(wǎng)實際上是所有信息的總和。我們曾經(jīng)為了便于人們?yōu)g覽提供了在瀏覽器中顯示html的方式,但是如果您的合作伙伴或者您公司的其他工作人員的一些進程或者程序需要調(diào)用這些信息時候,目前的技術實在是在無能為力的。XML技術的產(chǎn)生使得人們隨心所欲表現(xiàn)任何數(shù)據(jù)成為可能。因此,你可以利用xml創(chuàng)建更多的web service,以便人們可以用多種方式調(diào)用程序或者交換數(shù)據(jù)。Xml的確是一件強有力的工具,他也可以幫助人們構建更多種類的應用程序。Xml技術也給客戶提供了更多的幫助,由于他們同樣可以獲得數(shù)據(jù)和信息,所以他們可以做更多的事情。

由于有了以上這些技術,你不一定非要從客戶端基于瀏覽器的應用程序中調(diào)用WEB服務。你還可以在一個普通的VB或者C#應用程序中使用WEB服務。
這些都不是什么問題。當然,這里面還有一個問題應該強調(diào)一下。我們所使用的SOAP和XML都是開放式協(xié)議標準。這些標準不是WINDOWS系統(tǒng)獨有的,他們現(xiàn)在已經(jīng)被許多家生產(chǎn)廠家所推崇。所以我們可以和UNIX系統(tǒng),可以和基于JAVA 的系統(tǒng)交流,無論是發(fā)送信息還是接受信息,我們都可以用這種方式來交換信息,而不必考慮那臺機器上是否安裝了ASP.NET系統(tǒng)。如果真的會這樣,你將會看見遍及互聯(lián)網(wǎng)的應用程序用他們感興趣的方式開始了互聯(lián)。我們使用這些新技術的結果是,那些富客戶端的應用程序會漸漸被人們遺忘的。
當然從另一個方面來看,盡管ASP.NET和.NET框架的主要目標是啟動任何一種類型設備上的應用程序,但這并不意味著這些設備必須運行在.NET框架上。在ASP.NET平臺上,我們已經(jīng)作了許多直接支持WML這樣協(xié)議的事情。因此,你可以直接開發(fā)出與較小的設備,例如與WAP PHONE或者其他可以處理HTML的小設備通信的應用程序。

因此,你用一個簡單的AST.NET頁面,可以指向許多類型的設備。這些設備可能具有完全不一樣的特征。
是的。

這么說,是ASP.NET代碼確定了如何到一個小設備或者大設備這樣的事情嗎?
是這樣的。我們有一套特殊的服務器控件,我們稱他們?yōu)镸OBILE CONTROL,他們可以根據(jù)設備的類型,自動地發(fā)送WML,HDML或者HTML信息,譬如說如果你有一個愛立信的手機,他可能只有4、5行顯示文字的區(qū)域,如果你調(diào)用的一個頁面時,我們可以自動地根據(jù)這個設備的情況提供合適的顯示方式。

這是否意味著開發(fā)人員不得不考慮他們所遇到的所有不同的情況,例如,這是個彩色的瀏覽器那是一個POCKET PC的顯示界面。
不會的。這實際上就是ASP.NET最迷人的部分。通過這些服務器控件,你實際上找到了一條包含你所想象的不同行為方式或者對不同類型設備的不同輸出的最好的解決問題的辦法。我們可以在許多不同的情況下實現(xiàn)這些事情。例如,我們有一套控件是用來作確認工作的,確認的工作是一個站點中非常復雜的工作。特別是當你想生成客戶端的代碼,并且由這些代碼來做確認的工作的時候,你會遇到很多麻煩的,F(xiàn)在,我們這套控件自動地為你做這些事情。它們包含了最基本的確認行為。對于富瀏覽器端的程序,他們將發(fā)送一種東西,他們將發(fā)送SCRIPT 代碼,對于服務器端的程序他們也將履行確認這個過程,并產(chǎn)生相同的結果。只不過這里這時的主要工作是在服務器端進行。
服務器端控件自動的處理客戶是有意按照客戶端腳本運行還是故意不按照客戶端腳本運行等情況,并且可以很好地控制這一切。你所做的只是在你的頁面中宣布這些控件為TAGS,然后寫上2,3行借用他們處理的代碼,你便擁有了一個完整的確認頁面了。

你說的只是一些基本的確認,他們支持對數(shù)字的確認嗎?
是的,有一系列的東西我們支持。我們支持電話號碼、郵政編碼等相關的東西。我們會遇到很多的問題,有時候要確認添入的東西是不是數(shù)字,有時候他們添入的數(shù)字要匹配一些規(guī)則的表達式,有時候添入的數(shù)字要滿足一定的界限的限制。
這些要求是可擴展的,我們由第三方廠家來從事這方面的工作。其中,第三方廠家做的一項工作是關于郵政編碼的確認。你可以在一個頁面的文本框里面使用這種確認,他將判斷你輸入的數(shù)字是否是一個有效的郵政編碼,因此你可以在許多不同的場合使用這些確認功能,他們可以使您更容易編寫頁面程序。
實際上,完全組件化的系統(tǒng)允許開發(fā)人員和第三方的工作人員幾乎在系統(tǒng)的任何一個層面插入他們的代碼,這是我們一個最大的革新措施。我們常聽見使用ASP的那些開發(fā)人員說過的一件事情:我喜歡ASP,我很喜歡Session State這樣的東西,但是我希望他可以工作在WEB FARM上。例如他們會問,我如何使得他工作在WEB FARM 上?答案是,在ASP的環(huán)境中那是不可能的。但是在ASP.NET中,我們可以使得Session State工作在WEB FARM中,因此你可以盡情的使用了。此外,如果你想完全取代Session State你也可以做到;你想修改緩存輸出的方法,你也可以輕松做到,因為整個系統(tǒng)是組件化的。如果還有人提出,盡管我們的喜歡response 、 request、session以及與他們相關的這些應用,但是我還想在ISAPI這個層面做更多的工作。我應該如何去實現(xiàn)呢?答案是,在ASP中沒有辦法實現(xiàn),因為所有的事情都封裝在ASP系統(tǒng)中。沒有辦法達到這么低的級別中,但是,如果你采用ASP.NET的話,由于它是組件構架的系統(tǒng)模型,所以你可以做你想做的事情。

嗷,在你提及ISAPI的時候,我想起了在ISAPI應用中有兩種完全不同的模式:ISAPI應用模式和ISAPI過濾器模式,ASP.NET是否支持這兩種不同模式?
是的,他支持這兩種不同的模式。