.net.NET是Microsoft XML Webservices平臺。XML Webservices允許應用程序通過Internet進行通訊和共享數(shù)據(jù),而不管所采用的是哪種操作系統(tǒng)、設備或編程語言。Microsoft.NET平臺提供創(chuàng)建XMLWebservices并將這些服務集成在一起之所需。
.netWebServices是.NET的核心技術。Web是新一代的用戶與應用交互的途徑,XML是新一代的程序之間通訊的途徑一樣,Web Services是新一代的計算機與計算機之間一種通用的數(shù)據(jù)傳輸格式,可讓不同運算系統(tǒng)更容易進行數(shù)據(jù)交換。Web Services有以下幾點特性:Webservices允許應用之間共享數(shù)據(jù);Web services分散了代碼單元;基于XML這種internet數(shù)據(jù)交換的通用語言,實現(xiàn)了跨平臺、跨操作系統(tǒng)、跨語言。那微軟的ASP和Webservices究竟有什么不同呢,ASP仍然是一個集中式計算模型的產物,只不過是披著一層互聯(lián)網的外衣。但WebServices卻是一個迥然不同的精靈,它秉承“軟件就是服務”的真言,同時順應分布式計算模式的潮流。而它的存在形式又與以往軟件不同。這種組件模式,小巧、單一,對于開發(fā)人員來講,開發(fā)成本較低。
在這里指出Webservices不是微軟發(fā)明的,同樣也不屬于微軟專有。Webservices是一個開放的標準,和HTTP、XML、SOAP一樣。他們是一個工業(yè)標準而非微軟標準,WS-I是為了促進WebServices互通性的聯(lián)盟組織,最初是由IBM和微軟所發(fā)起,其它的成員包括BEASystem、惠普計算機(HP)、甲骨文(Oracle)、英特爾(Intel)和SUN計算機(SunMicrosystem)。如今網絡上存在的大多Webservices其實沒有使用.NET構架,Webservices具有互操作屬性,你同樣可以使用Windows開發(fā)客戶端來調用運行于Linux上面的Webservices的方法。
在.NET中,Webservice接口通常使用WebServicesDescriptionLanguage(WSDL)描述。WSDL使用XML來定義這種接口操作標準及輸入輸出參數(shù),看起來很像COM和CORBA的接口定義語言(IDLS)InterfaceDefinitionLanguages。接口定義后就必須使用一些協(xié)議調用接口,如SOAP協(xié)議,SOAP源于一種叫做XMLRPC(XML遠程進程調用remoteprocedurecalling)的協(xié)議,而Java則根據(jù)XML-RPC發(fā)展了自己的JAX-RPC協(xié)議用來調用WebServices。
.net編寫的組件或控件,最常規(guī)的作法是包括屬性,方法以及事件等東東。但是如果想把組件或控件做得更加專業(yè),就必須為屬性或方法得供必要的說明或者是分類。而這一切都包含在組件的Attribute中。對于它,相信寫過C#程序的都不會忘記,它就是包含在[]中的東東,比如[DefaultValue(“ASPcn”)],[Description(“互動百科”)]等。
[Browsable(true|false)]設置屬性或者事情是否在VS.net的屬性窗口中出現(xiàn)。
[Category(“外觀”)]設置屬性或者事件在屬性窗口中歸于的組別。
[Description(“此控件于位于aspcn命名空間中”)]看英文就是知道了,這是關于屬性的說明。它會出現(xiàn)在VS.Net屬性窗口的說明之中
[DefaultValue(“互動百科”)]設置屬性的默認值,值類型須與屬性的類型一致。
[Bindable(true|false)]設置屬性是否可以被捆綁。
[Localizable(true|false)]設置屬性是否被本地化。
[DefaultEvent(“OnClick”)]也就是在Vs.Net設計窗口中,雙擊控件時默認連接的事件處理。當然這些還有好多。一般來說如果使用VS.Net開發(fā)。另外,如果需要對一個屬性指定多個Attribute,可以使用兩種方法。
第一種:
[DefaultValue(“互動百科”)]
[Description(“HI,歡迎你來”)]
[Category(“外觀”)]
publicstringAdver()
{
...
}
這是最原始的,也可以將這些聲明寫在同一個“[]”中
[
DefaultValue(“互動百科”),
Description(“HI,歡迎你來”),
Category(“外觀”)
]
publicstringAdver()
{
...
}
在做一個程序是離不開屬性,特別是實體類。用指頭一個一個的敲著get和set及局部的變量(Fields),現(xiàn)在可好不用在重復敲那些東東了只要用到get和set,就和接口聲明差不多。看個例子先,在.NET2.0下聲明一個實體類要有如下做法。
.net1publicclassPerson{
2
3 privatestringfirstName;
4 privatestringlastName;
5 privateintage;
6
7 publicstringFirstName{
8
9 get{
10 returnthis.firstName;
11 }
12 set{
13 this.firstName=value;
14 }
15}
16
17publicstringLastName{
18
19 get{
20 returnthis.lastName;
21 }
22 set{
23 this.lastName=value;
24 }
25}
26
27publicintAge{
.net28
29 get{
30 returnthis.age;
31 }
32 set{
33 this.age=value;
34 }
35}
36}
在.NET3.x中可以省了很多東西,代碼也變得簡單很多,代碼如下:
1publicclassPerson{
2
3 publicstringFirstName{
4 get;set;
5 }
6
7 publicstringLastName{
8 get;set;
9 }
10
11 publicintAge{
12 get;set;
13 }
14}
.net從命名空間的命名、目錄的劃分與命名可以看出一個程序員是否有經驗,是否很有經驗。一個編程老手絕不允許架構混亂。.net開發(fā)中,一般目錄名與命名空間名稱是對應的。關于命名空間如何劃分,目錄如何分類,這個問題看似簡單,實際上卻比較復雜,雖然它不像動植物學有一套完整的分類學。
在.NetB/S架構中,一般分為如下三個主要的命名空間:
[公司名/作者名].[項目名].Business
[公司名/作者名].[項目名].Data
[公司名/作者名].[項目名].Web這三部分可以在一個project中,也可以分置三處。
目錄分類與空間命名之難在于:分類因素是二維的,而分類卻只是一維的。解釋一下:分類是一維的,指一個詞語只能代表一個分類名稱的含義,無論同時表達兩個含義;分類因素是二維的,指分類可以橫向類別分類,也可以按縱向屬性分類。假設正在開發(fā)一個電子商務圖書網站,這個商務按照常規(guī),它有用戶中心,幫助中心,支付中心,商品中心等。的這個項目分為三個project,如下:
Sban.ZLBook.Business
Sban.ZLBook.Data
Sban.ZLBook.Web
在Sban.ZLBook.Web工程中,下設UserCenter、HelpCenter、PayCenter、ProductCenter等目錄,這樣的分類便是按類別橫向分類。而在這些分類中,肯定都用到了圖片,還有一些css樣式文件,這些文件放在哪里?把它們放在Web工程的Images目錄下(如果不另辟圖片服務器的話)。如果文件太多,不好管理,其子目錄又可以分為UserCenter、HelpCenter、PayCenter、ProductCenter等。如此,Images的目錄的劃分便是按縱向屬性分類。
關于具體如何命名,沒有什么通用的方法,要看具體項目。做的項目多了,架構才能見水平。命名空間與目錄建議大寫。不知道應該如何架構的時候,不妨翻一翻官方的類庫。btw:flex工程中,包名(pakeage)與目錄小寫,而類名大寫。
.net在.NET1.x的C#、.NET2.0的各種語言中,有所謂的usingstatement,可保證自動dispose(釋放)unmanagedobject(對象)所占用的資源,包括因未處理的exception而造成區(qū)塊結束(但StackOverflowException除外),系統(tǒng)都會dispose資源。因此若您在using區(qū)塊中建立了數(shù)據(jù)庫的connection,即無須再手動closeconnection,亦無須再下Connection.Dispose()、Command.Dispose()等指令。
根據(jù)MSDNLibrary和市面上幾本ADO.NET2.0原文書都有提到,在using區(qū)塊中會自動去做dispose的動作。.NET的garbagecollector會自動釋放不再使用的managedresources所占用的內存,不用程序員手動撰碼;但unmanagedresources則需要程序員自行下Dispose()去做處理,以讓對象徹底終止unmanagedresources的使用。例如傳統(tǒng)的做法,常會在try-catch-finallypattern中去呼叫Dispose方法;但若是數(shù)據(jù)庫的聯(lián)機,則必須有不同考慮,因為若任意下Dispose提早回收,也可能導致聯(lián)機無法有效地被重復引用。
數(shù)據(jù)庫和DataProvider都有支持ConnectionPooling機制,亦即在建立完數(shù)據(jù)庫的聯(lián)機后,當程序員呼叫Close方法關閉一個數(shù)據(jù)庫的Connection對象時,.NET的DataProvider并不會將這個對象所占用的內存空間釋放掉,而是將此對象暫存至Pool之中,以便待會可以再重復使用。
若在設定時間(默認為60秒)內,沒有應用程序使用到此對象,或是呼叫了Dispose方法,則.NETDataProvider才會真正關閉這個聯(lián)機,并由GarbageCollector自動將資源收回。因此,常有web程序員在網絡上各討論區(qū)提到,是否有必要在呼叫Close方法后,再呼叫Dispose方法,并將Connection設為Nothing(或Null)答案是不必要的。因為GC過一陣子就會自動回收未再被參照的聯(lián)機,手動呼叫Dispose只不過提早回收的動作而已。而且若是該聯(lián)機,可能會在短時間內被大量使用者同時存取的話,也應讓其待在Pool中待命,而應避免手動呼叫Dispose方法,導致它被真正關閉并被回收,而無法有效地被重復使用。
.net由于GC只會在系統(tǒng)閑置或內存不足時才啟動,因此除非是使用頻率非常繁復的資源,否則交由GC自行處理即可。而設為Nothing(或Null)也只是將Connection變量的位置清除(NullReference),事實上原來New出來的Connection對象還是存在。而Dispose方法是用來處理自行建立的Windows資源,但又不會自行釋放的對象,如檔案(開檔與關文件)、GDI對象(直接由WinAPI叫用)。
.NET的VB/C#語言中都有的usingstatement.using語句算是簡易版的try-finallypattern,可讓程序員以較簡便的寫法盡早去釋放資源,尤其最適用在有限的unmanagedresources上,例如:檔案和串流I/O、Socket網絡連接、FileHandle(檔案控制代碼)、COM組件、繪圖和字形、數(shù)據(jù)庫存取、WorkflowRuntime(WF)等的內存自動釋放。usingstatement遇到例外時,也會拋出例外(throw),但不會去catch處理例外;因此若您想要自行處理例外的話,只能回歸傳統(tǒng)的try-catch-finally寫法。
提供給usingstatement的對象必須實作IDisposable接口。若是自己寫的class,只要實作System.IDisposable接口,即擁有Dispose方法。之后若引用usingstatement去釋放這個class的instance,即會自動做object的Close()、Dispose()、設定為null(Nothing)這三種動作,不需要再自己手動處理。反而若是自己手動多下一次Close(),會讓CLR浪費資源多做一次處理,反倒會影響程序“性能(performance)”。根據(jù)國外網站及ADO.NET2.0書籍證實,若using語句搭配CommandBehavior.CloseConnection一起使用,其重復關閉數(shù)據(jù)庫聯(lián)機的動作,會大幅地降低程序性能,處理時間甚至會多出84%以上(叫用ExecuteReader()時,若搭配CommandBehavior枚舉值(enumeratedvalue),可要求在查詢完成后,自動關閉數(shù)據(jù)庫聯(lián)機)。
此外,usingstatement也可多層巢狀地使用,例如:第一層的usingstatement里包SqlConnection的宣告及instance的新增,第二層包SqlCommand,第三層包SqlDataReader。亦可在巢狀的usingstatement中指定多種的系統(tǒng)資源,包括數(shù)據(jù)庫的transaction交易處理。
MYSQL |
IP |
ICP |
ALEXA |
PR |
SEO |
CGI |
FSO |
FTP |
POP3 |
WCM |
ECM |
FLASH |
WEB |
GPU |
CPA |
DIV |
CSS |
HTML |
BBS |
.NET |
XML |
AJAX |
MD5 |
1、http://dotnet.chinaitlab.com/DotNetFramework/757346.html
2、http://dev.21tx.com/2007/09/09/10518.html
3、http://dev.21tx.com/2008/08/04/12826.html