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