国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Microsoft .NET 框架常見問題

2024-07-10 13:00:02
字體:
供稿:網(wǎng)友
摘要:本文包含有關(guān) microsoft .net 和 microsoft .net 框架的常見問題。

目錄
概念問題
運行時技術(shù)問題
術(shù)語
程序集
應(yīng)用程序部署及隔離
垃圾回收
遠(yuǎn)程處理
互操作性
安全性

概念問題
什么是 .net?


什么是 .net 框架?


.net 框架是否只適用于創(chuàng)建 web 站點的用戶?


從何處可以獲得 .net 框架 sdk?


.net 框架可以運行于哪些平臺?


.net 框架支持哪些編程語言?


.net 框架和 com+ 服務(wù)之間是什么關(guān)系?


.net 框架和 dcom 之間是什么關(guān)系?


.net 框架是否僅僅是 windows dna 的新名稱?
運行時技術(shù)問題
術(shù)語
什么是公共語言運行時 (clr)?


什么是公共類型系統(tǒng) (cts)?


什么是公共語言規(guī)范 (cls)?


什么是 microsoft 中間語言 (msil)?


什么是托管代碼和托管數(shù)據(jù)?
程序集
什么是程序集?


什么是專用程序集和共享程序集?


如果我想創(chuàng)建一個共享程序集,在標(biāo)記和管理密鑰對方面是否需要額外的開銷?


名稱空間與程序集名稱之間有什么區(qū)別?
應(yīng)用程序部署和隔離
部署 .net 應(yīng)用程序時可以使用哪些選項?


如果我已經(jīng)編寫了一個程序集,并希望在多個應(yīng)用程序中使用它,我應(yīng)該在何處部署它?


如何才能看到在全局程序集緩存中安裝了哪些程序集?


什么是應(yīng)用程序域?
垃圾回收
什么是垃圾回收?


非確定性垃圾回收是如何影響代碼的?


是否能夠避免使用可作為垃圾回收的堆?
遠(yuǎn)程處理
如何在公共語言運行時中進(jìn)行進(jìn)程內(nèi)和進(jìn)程間通訊?
互操作性
是否可以在 .net 框架程序中使用 com 對象?


是否可以在 com 程序中使用 .net 框架組件?


是否可以在 .net 框架程序中使用 win32 api?
安全性
如何使代碼與安全系統(tǒng)協(xié)調(diào)工作?


為什么在網(wǎng)絡(luò)共享驅(qū)動器中運行代碼時會發(fā)生安全異常?


如何編寫代碼,使它在安全系統(tǒng)停止該代碼時運行?


如何管理個人或企業(yè)計算機(jī)的安全性?


基于證據(jù)的安全性是如何與 windows 2000 安全性配合工作的?
概念問題
什么是 .net?
簡單地說,microsoft® .net 是 microsoft 以服務(wù)的方式遞交軟件的一種策略。有關(guān)完整信息,請參閱有關(guān)該主題的白皮書(英文)。

以下是白皮書的摘要,簡要介紹了 .net 的關(guān)鍵內(nèi)容:

microsoft .net 平臺
包括用于創(chuàng)建和操作新一代服務(wù)的 .net 基礎(chǔ)結(jié)構(gòu)和工具、用于實施多信息客戶端的 .net 用戶經(jīng)驗,以及用于啟用新一代智能 internet 設(shè)備的 .net 構(gòu)造塊服務(wù)和 .net 設(shè)備軟件。


microsoft .net 產(chǎn)品和服務(wù)
包括 microsoft® windows.net(其核心集成了一組構(gòu)造塊服務(wù))、msn.net、個人訂閱服務(wù)、microsoft® office.net、microsoft® visual studio.net 和 microsoft® bcentral™ for .net。


第三方 .net 服務(wù)
許多領(lǐng)域的合作伙伴和開發(fā)人員都有機(jī)會在 .net 平臺上提供企業(yè)和垂直服務(wù)。
此問題針對的是 .net 框架。.net 框架是 .net 平臺基礎(chǔ)結(jié)構(gòu)的一部分。有關(guān) .net 框架的詳細(xì)信息,請參閱下一個問題。

返回頁首

什么是 .net 框架?
.net 框架是創(chuàng)建、部署和運行 web 服務(wù)及其他應(yīng)用程序的一個環(huán)境。它包括三個主要部分:公共語言運行時、框架類和 asp.net。

返回頁首

.net 框架是否只適用于創(chuàng)建 web 站點的用戶?
.net 框架使您可以創(chuàng)建優(yōu)秀的 web 應(yīng)用程序。但它也可以幫助您創(chuàng)建現(xiàn)在的各種應(yīng)用程序。與當(dāng)前創(chuàng)建應(yīng)用程序的方式相比,.net 在編寫任何 windows 軟件(使用 atl/com、mfc、microsoft® visual basic® 或標(biāo)準(zhǔn) microsoft® win32®)方面都具有更大的優(yōu)勢。當(dāng)然,如果您是開發(fā) web 站點,那么從 asp.net 開始,您就會感受到 .net 框架的強(qiáng)大吸引力。

返回頁首

從何處可以獲得 .net 框架 sdk?
現(xiàn)在可以從 msdn online downloads(英文)下載 .net 框架 sdk 的 beta 1 版。鑒于其大小,我們以多種方式提供此 beta 版:作為一個下載文件 (106 mb),分為 11 部分下載,或者從 microsoft developer store 定購其 cd:

美國/加拿大(英語)


國際(英語)
返回頁首

.net 框架可以運行于哪些平臺?
beta 1 版可以運行在 microsoft® windows® 2000、windows 95/98/me 和 windows nt® 4.0 上。

另外,還有一個稱為 .net 精簡框架的 .net 框架版本。它用于使蜂窩電話和增強(qiáng)型電視等設(shè)備也具有 .net 框架的某些功能。.net 精簡框架將運行在 windows ce 和其他嵌入式操作系統(tǒng)上。

返回頁首

.net 框架支持哪些編程語言?
.net 框架與編程語言無關(guān)。事實上任何語言都可以支持 .net 框架。目前,您可以用許多語言來創(chuàng)建 .net 程序,包括:c++、microsoft® visual basic.net、jscript® 和 microsoft 的最新語言——c#。以后,也會有大量的第三方語言可以用來創(chuàng)建 .net 框架應(yīng)用程序,包括 cobol、eiffel、perl、python、smalltalk 等等。

返回頁首

.net 框架和 com+ 服務(wù)之間是什么關(guān)系?
在 .net 框架中,不僅可以完全訪問 com+ 服務(wù),而且也更容易創(chuàng)建服務(wù)組件。

.net 框架組件可被添加至 com+ 應(yīng)用程序中。在 com+ 應(yīng)用程序中,.net 框架組件可以利用自動組件服務(wù),例如:事務(wù)、對象池、排隊組件、事件等等。

返回頁首

.net 框架和 dcom 之間是什么關(guān)系?
dcom 是用于進(jìn)程間通訊的 com 基礎(chǔ)結(jié)構(gòu)。.net 框架支持大量用于進(jìn)程間通訊的可插入通道和格式化程序。在托管代碼和非托管代碼之間進(jìn)行轉(zhuǎn)換時,.net 框架使用了 com 基礎(chǔ)結(jié)構(gòu),尤其是 dcom。所有使用 com+ 服務(wù)的方案都使用了托管到非托管轉(zhuǎn)換,因此默認(rèn)使用 dcom。對于注重互操作性的進(jìn)程間通訊,.net 框架也支持 soap(簡單對象訪問協(xié)議)。

返回頁首

.net 框架是否僅僅是 windows dna 的新名稱?
不。windows dna 是用于創(chuàng)建緊耦合的分布式 web 應(yīng)用程序的一種體系結(jié)構(gòu)。由于分布式應(yīng)用程序變得需要更多的松耦合原理,因此 microsoft 在 .net 中發(fā)展了該體系結(jié)構(gòu)。.net 框架是 .net 體系結(jié)構(gòu)的一部分。

返回頁首

運行時技術(shù)問題
術(shù)語
什么是公共語言運行時 (clr)?
公共語言運行時是 .net 框架應(yīng)用程序的執(zhí)行引擎。

它提供許多服務(wù),包括:

代碼管理(加載和執(zhí)行)


應(yīng)用程序內(nèi)存隔離


類型安全驗證


il 到本機(jī)代碼的轉(zhuǎn)換


元數(shù)據(jù)(增強(qiáng)的類型信息)訪問


為托管對象管理內(nèi)存


強(qiáng)制代碼訪問安全


異常處理,包括跨語言異常


托管代碼、com 對象和現(xiàn)有 dll(非托管代碼和數(shù)據(jù))之間的互操作


自動進(jìn)行對象布局


對開發(fā)人員服務(wù)(配置、調(diào)試等)的支持
返回頁首

什么是公共類型系統(tǒng) (cts)?
公共類型系統(tǒng)是多信息類型系統(tǒng),它被內(nèi)置在公共語言運行時中,支持大多數(shù)編程語言中的類型和操作。公共類型系統(tǒng)支持大量編程語言的完全實現(xiàn)。

返回頁首

什么是公共語言規(guī)范 (cls)?
公共語言規(guī)范是一組結(jié)構(gòu)和限制,用作庫編寫者和編譯器編寫者的指南。它使任何支持 cls 的語言都可以完全使用庫,并且使這些語言可以相互集成。公共語言規(guī)范是公共類型系統(tǒng)的子集。對于那些需要編寫代碼供其他開發(fā)人員使用的應(yīng)用程序開發(fā)人員,公共語言規(guī)范也非常重要。如果開發(fā)人員遵循 cls 規(guī)則來設(shè)計公共訪問的 api,那么就可以在支持公共語言運行時的任何其他編程語言中很容易地使用這些 api。

返回頁首

什么是 microsoft 中間語言 (msil)?
msil 是與 cpu 無關(guān)的指令集。.net 框架程序被編譯成 msil。它包含加載、存儲、初始化和調(diào)用對象方法的指令。

與元數(shù)據(jù)和公共類型系統(tǒng)結(jié)合,msil 允許真正的跨語言集成。

msil 在執(zhí)行前被轉(zhuǎn)換為機(jī)器代碼,而不是一邊解釋一邊執(zhí)行。

返回頁首

什么是托管代碼和托管數(shù)據(jù)?
托管代碼是編寫為支持公共語言運行時服務(wù)的代碼(請參閱“什么是公共語言運行時?”)。為了支持這些服務(wù),代碼必須向運行時提供最小級別的信息(元數(shù)據(jù))。默認(rèn)情況下,所有 c#、visual basic.net 和 jscript.net 代碼都是托管代碼。visual studio.net c++ 代碼在默認(rèn)情況下不是托管代碼,但通過指定命令行開關(guān) (/clr),編譯器也可以生成托管代碼。

與托管代碼密切相關(guān)的是托管數(shù)據(jù)。托管數(shù)據(jù)是由公共語言運行時的垃圾回收器進(jìn)行分配和釋放的數(shù)據(jù)。默認(rèn)情況下,c#、visual basic 和 jscript.net 數(shù)據(jù)是托管數(shù)據(jù)。不過,通過使用特殊的關(guān)鍵字,c# 數(shù)據(jù)可以被標(biāo)記為非托管數(shù)據(jù)。visual studio.net c++ 數(shù)據(jù)在默認(rèn)情況下是非托管數(shù)據(jù)(即使在使用 /clr 開關(guān)時),但是在使用 c++ 的托管擴(kuò)展時,可以使用“__gc”關(guān)鍵字將類標(biāo)記為托管類。就象該名稱所顯示的那樣,它表示類實例的內(nèi)存由垃圾回收器管理。另外,該類也完全成為 .net 框架的成員,同時具備它所帶來的好處和限制。好處的一個例子是:它可以與其他語言編寫的類正確地進(jìn)行互操作(如托管的 c++ 類可以從 visual basic 類繼承);限制的一個例子是:托管類只能從一個基類繼承。

返回頁首

程序集
什么是程序集?
程序集是 .net 框架應(yīng)用程序的主要構(gòu)造塊。它是作為一個單一實現(xiàn)單元(包含一個或多個文件)來創(chuàng)建、標(biāo)識和部署的功能集合。所有的托管類型和資源都可以被標(biāo)記為僅在其實現(xiàn)單元內(nèi)訪問,或者標(biāo)記為可由該單元以外的代碼來訪問。

程序集通過清單來進(jìn)行自我說明。清單是每個程序集的不可或缺的組成部分。清單:

建立程序集標(biāo)識(以文本名稱的格式)、版本、類別和數(shù)字簽名(如果要在應(yīng)用程序之間共享該程序集)。


定義組成程序集實現(xiàn)的文件(通過名稱和文件散列)。


指定組成程序集的類型和資源,包括哪些是從程序集中導(dǎo)出的。


逐條記錄編譯時對其他程序集的依存。


指定程序集正確運行所需要的權(quán)限的集合。
此信息在運行時用于解析引用、強(qiáng)制版本綁定策略以及驗證所加載的程序集的完整性。因為每一類型都被加載到程序集的上下文中,所以運行時可以確定并定位任何正在運行的對象的程序集。程序集也是應(yīng)用了代碼訪問安全權(quán)限的單元。在確定授予其所包含的代碼哪些權(quán)限時,每個程序集的標(biāo)識證據(jù)都被認(rèn)為是獨立的。

程序集的自我說明特征也有助于實現(xiàn)無影響安裝和 xcopy 部署。

返回頁首

什么是專用程序集和共享程序集?
專用程序集僅由單一應(yīng)用程序使用,并且存儲在該應(yīng)用程序的安裝目錄中(或其子目錄中)。共享程序集是可被多個應(yīng)用程序引用的程序集。要共享一個程序集,該程序集必須明確為這個目的而創(chuàng)建,這可以通過給其指定加密的增強(qiáng)型名稱(用作共享名稱)來實現(xiàn)。相反,專用程序集名稱只要求在使用它的應(yīng)用程序中是唯一的。

通過區(qū)分專用和共享程序集,我們介紹明確決定共享的要點。只需簡單地將專用程序集部署在應(yīng)用程序目錄中,即可確保應(yīng)用程序只在創(chuàng)建和部署它的那部分中運行。對專用程序集的引用只在專用應(yīng)用程序目錄內(nèi)部進(jìn)行解析。

選擇創(chuàng)建和使用共享程序集可以有多種原因,例如表達(dá)版本策略的能力。共享程序集具有加密的增強(qiáng)型名稱,這項事實意味著只有程序集的作者才擁有密鑰來生成程序集的新版本。因此,如果您做出策略聲明,希望接受程序集的新版本,則您可以確信版本更新將由作者來控制和驗證。否則,您就不會接受它們。

對于在本地安裝的應(yīng)用程序,共享程序集通常被明確安裝在全局程序集緩存中(程序集的本地緩存由 .net 框架維護(hù))。.net 框架的版本管理特性的關(guān)鍵在于下載的代碼不會影響本地安裝的應(yīng)用程序的執(zhí)行。下載的代碼被放在一個特殊的下載緩存中,即使某些下載組件被編譯為共享程序集,也不能在機(jī)器上全局使用這些代碼。

與 .net 框架一起發(fā)布的類都被編譯為共享程序集。

返回頁首

如果我想創(chuàng)建一個共享程序集,在標(biāo)記和管理密鑰對方面是否需要額外的開銷?
創(chuàng)建共享程序集確實涉及到加密密鑰方面的工作。創(chuàng)建程序集時,只有公共密鑰是必要的。支持 .net 框架的編譯器提供命令行選項(或使用自定義屬性),用于在創(chuàng)建程序集時提供公共密鑰。通常在資源數(shù)據(jù)庫中保留一份常用的公共密鑰,并使編譯腳本指向此密鑰。在發(fā)布程序集之前,必須使用相應(yīng)的私人密鑰將其完全標(biāo)記。這是通過 sdk 工具 sn.exe(增強(qiáng)型名稱)來完成的。

增強(qiáng)型名稱標(biāo)記不象 authenticode 一樣需要使用證書。它不涉及第三方組織,不需要付費,也不受證書約束。另外,驗證增強(qiáng)型名稱的額外開銷遠(yuǎn)遠(yuǎn)小于驗證 authenticode 的開銷。不過,增強(qiáng)型名稱不會生成任何信任某個出版商的語句。增強(qiáng)型名稱使您可以確信給定程序集的內(nèi)容沒有被篡改,在運行時為您加載的程序集來自于您開發(fā)時針對的出版商。但它不會生成有關(guān)是否信任出版商身份的語句。

返回頁首

名稱空間與程序集名稱之間有什么區(qū)別?
名稱空間是類型的一種邏輯命名方案,其中簡單類型名稱(如 mytype)前面帶有用點分隔的層次結(jié)構(gòu)名稱。這樣的命名方案完全在開發(fā)人員的控制之下。例如,鍵入 mycompany.fileaccess.a 和 mycompany.fileaccess.b 在邏輯上將會具有與文件訪問相關(guān)的功能。.net 框架使用一種層次結(jié)構(gòu)命名方案,用于將類型按相關(guān)功能的邏輯類別進(jìn)行分組,例如,asp.net 應(yīng)用程序框架或遠(yuǎn)程處理功能。設(shè)計工具可以利用名稱空間使開發(fā)人員更容易在代碼中瀏覽和引用類型。名稱空間的概念與程序集的概念之間沒有任何聯(lián)系。一個程序集可以包含其層次結(jié)構(gòu)名稱具有不同名稱空間根的類型,而一個邏輯名稱空間根可以跨越多個程序集。在 .net 框架中,名稱空間是在設(shè)計時進(jìn)行邏輯命名的便捷方式,而程序集在運行時為類型建立名稱作用域。

返回頁首

應(yīng)用程序部署和隔離
部署 .net 應(yīng)用程序時可以使用哪些選項?
通過使應(yīng)用程序的無影響安裝和 xcopy 部署成為可能,.net 框架簡化了部署。因為所有的請求首先在專用應(yīng)用程序目錄中進(jìn)行解析,所以只需簡單地將一個應(yīng)用程序的目錄文件復(fù)制到磁盤中,即可運行該應(yīng)用程序,而不需要注冊。

此方案對于 web 應(yīng)用程序、web 服務(wù)和獨立的桌面應(yīng)用程序特別有吸引力。不過,在有些方案中 xcopy 還不足以擔(dān)當(dāng)分發(fā)機(jī)制。例如,當(dāng)應(yīng)用程序具有很少的專用代碼,而依賴于可用的共享程序集;或者應(yīng)用程序不是安裝在本地(而是按需下載)。對于這些情況,.net 框架提供了擴(kuò)展的代碼下載服務(wù)以及與 windows installer 的集成。.net 框架提供的代碼下載支持通過當(dāng)前平臺提供了許多優(yōu)勢,包括增量下載、代碼訪問安全性(不再有“authenticode”對話框)和應(yīng)用程序隔離(為一個應(yīng)用程序下載的代碼不會影響其他應(yīng)用程序)。windows installer 是 .net 應(yīng)用程序可以使用的另外一個強(qiáng)大的部署機(jī)制。在 windows installer 1.5 中,windows installer 的所有特性(包括發(fā)行、公布和應(yīng)用程序修補(bǔ))都可以在 .net 應(yīng)用程序中使用。

返回頁首

如果我已經(jīng)編寫了一個程序集,并希望在多個應(yīng)用程序中使用它,我應(yīng)該在何處部署它?
要由多個應(yīng)用程序使用的程序集(如共享程序集)需要部署到全局程序集緩存中。在預(yù)發(fā)布版和 beta 版中,使用 alink sdk 工具的 /i 選項可將程序集安裝到緩存中:

al /i:mydll.dll
windows installer 的后續(xù)版本能夠?qū)⒊绦蚣惭b到全局程序集緩存中。

返回頁首

如何才能看到在全局程序集緩存中安裝了哪些程序集?
.net 框架附帶了一個 windows 外殼擴(kuò)展,用于查看程序集緩存。在 windows 資源管理器中,轉(zhuǎn)至 % windir%/assembly 以激活查看器。

返回頁首

什么是應(yīng)用程序域?
應(yīng)用程序域(通常是 appdomain)是用于隔離應(yīng)用程序的虛擬進(jìn)程。在同一個應(yīng)用程序作用域中創(chuàng)建的所有對象(換句話說,從該應(yīng)用程序的入口點開始沿著對象激活序列的任何地方)都在同一個應(yīng)用程序域中創(chuàng)建。多個應(yīng)用程序域可以存在于一個操作系統(tǒng)進(jìn)程中,使它們成為隔離應(yīng)用程序的簡便方式。

操作系統(tǒng)進(jìn)程通過使用各不相同的內(nèi)存地址空間來提供隔離。盡管它是有效的,但也是代價昂貴的,并且不能達(dá)到大型 web 服務(wù)器所需要的數(shù)量。與其相比,公共語言運行時通過管理在應(yīng)用程序域中運行的代碼的內(nèi)存使用來強(qiáng)制進(jìn)行應(yīng)用程序隔離。這樣就確保它不會訪問應(yīng)用程序域以外的內(nèi)存。需要注意的是,只有類型安全的代碼才能以這種方式管理(當(dāng)在應(yīng)用程序域中加載不安全代碼時,運行時不能保證隔離)。

返回頁首

垃圾回收
什么是垃圾回收?
垃圾回收是使計算機(jī)能檢測何時不再能夠訪問某個對象的一種機(jī)制。它將自動釋放由該對象使用的內(nèi)存(也調(diào)用用戶編寫的稱為“結(jié)束者”的清理例程)。一些垃圾回收器(如由 .net 使用的)會壓縮內(nèi)存,并因此減少程序的工作集。

返回頁首

非確定性垃圾回收是如何影響代碼的?
對于大多數(shù)編程人員而言,擁有一個垃圾回收器(并且使用可作為垃圾回收的對象)意味著永遠(yuǎn)不需要操心釋放內(nèi)存或引用計數(shù)對象,即使您使用了復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。但如果您通常在同一個用于釋放對象內(nèi)存的代碼塊中釋放系統(tǒng)資源(文件句柄、鎖定等等),那么在編碼樣式方面需要做一些修改。使用可作為垃圾回收的對象時,您應(yīng)該提供一種方法,來明確釋放系統(tǒng)資源(也就是說,由您的程序控制),同時允許垃圾回收器在壓縮工作集時釋放內(nèi)存。

返回頁首

是否能夠避免使用可作為垃圾回收的堆?
所有支持運行時的語言都允許您從可作為垃圾回收的堆中分配類對象。這在快速分配方面帶來了好處,并且使編程人員無需自己來計算何時應(yīng)該顯式“free”每個對象。

clr 還提供了 valuetypes 對象——它們與類相似,但 valuetype 對象是在運行時堆棧(不是堆)中分配的,因此當(dāng)您的代碼退出定義這些對象的過程時,將自動回收它們。這就是 c# 中“struct”的操作方式。

c++ 的托管擴(kuò)展使您可以選擇類對象分配的位置。如果使用 __gc 關(guān)鍵字聲明為托管類,它們將從可作為垃圾回收的堆中分配;如果它們不包含 __gc 關(guān)鍵字,它們將與普通的 c++ 對象一樣從 c++ 堆中分配,并且使用“free”方法顯式釋放。

有關(guān)垃圾回收的的詳細(xì)信息,請參閱:

垃圾回收:microsoft .net 框架中的自動內(nèi)存管理(英文)


垃圾回收 - 第 2 部分:microsoft .net 框架中的自動內(nèi)存管理(英文)
返回頁首

遠(yuǎn)程處理
如何在公共語言運行時中進(jìn)行進(jìn)程內(nèi)和進(jìn)程間通訊?
進(jìn)程內(nèi)通訊有兩種:在單一應(yīng)用程序域的上下文中,或者跨應(yīng)用程序域。在同一個應(yīng)用程序域的上下文中,使用代理作為監(jiān)聽機(jī)制,而不涉及封送處理/序列化。當(dāng)跨應(yīng)用程序域時,使用運行時二進(jìn)制協(xié)議來作封送處理/序列化。

進(jìn)程間通訊為每個特定目的使用一個可插入通道和格式化程序協(xié)議。

如果開發(fā)人員使用 soapsuds.exe 工具指定終結(jié)點來生成元數(shù)據(jù)代理,那么默認(rèn)值是帶有 soap 格式化程序的 http 通道。


如果開發(fā)人員在托管世界中執(zhí)行顯式遠(yuǎn)程處理,需要明確指定使用的通道和格式化程序。這可以通過配置文件用可管理的方式來表示,或者用 api 調(diào)用來加載特定通道。選項如下:
帶有 soap 格式化程序的 http 通道(http 在 internet 上或任何必須通過防火墻進(jìn)行通信的時候運行良好)

帶有二進(jìn)制格式化程序的 tcp 通道(對于局域網(wǎng),tcp 是性能較高的選項)

帶有 soap 格式化程序的 smtp 通道(僅對跨計算機(jī)有意義)

在托管代碼和非托管代碼之間進(jìn)行轉(zhuǎn)換時,com 基礎(chǔ)結(jié)構(gòu)(尤其是 dcom)用于遠(yuǎn)程處理。在 clr 的中間版本中,這也適用于服務(wù)組件(使用 com+ 服務(wù)的組件)。在最終版本中,配置任何遠(yuǎn)程組件都是可能的。

對象的分布式垃圾回收由名為“租用生存期”的系統(tǒng)來管理。每個對象都有一個租用時間,當(dāng)?shù)狡跁r,該對象與 clr 的遠(yuǎn)程處理基礎(chǔ)結(jié)構(gòu)斷開連接。對象具有一個默認(rèn)的更新時間——當(dāng)客戶端成功地調(diào)用了對象時,租用將被更新。客戶端可以顯式更新租用。

返回頁首

互操作性
是否可以在 .net 框架程序中使用 com 對象?
是。您現(xiàn)在部署的任何 com 組件都可以在托管代碼中使用。通常情況下,所需的調(diào)整是完全自動進(jìn)行的。

特別是,可以使用運行時可調(diào)用包裝 (rcw) 從 .net 框架訪問 com 組件。此包裝將 com 組件提供的 com 接口轉(zhuǎn)換為與 .net 框架兼容的接口。對于 ole 自動化接口,rcw 可以從類型庫中自動生成;對于非 ole 自動化接口,開發(fā)人員可以編寫自定義 rcw,手動將 com 接口提供的類型映射為與 .net 框架兼容的類型。

返回頁首

是否可以在 com 程序中使用 .net 框架組件?
是。您現(xiàn)在創(chuàng)建的托管類型都可以通過 com 訪問。通常情況下,所需的配置是完全自動進(jìn)行的。托管開發(fā)環(huán)境的某些新特性不能在 com 中訪問。例如,不能在 com 中使用靜態(tài)方法和參數(shù)化構(gòu)造函數(shù)。一般,提前確定給定類型所針對的用戶是一種較好的辦法。如果類型需要在 com 中使用,您將被限制在使用 com 可訪問的特性。

默認(rèn)情況下,托管類型可能是可見的,也可能是不可見的,這由用于編寫托管類型的語言決定。

特別是,可以使用 com 可調(diào)用包裝 (ccw) 從 com 訪問 .net 框架組件。這與 rcw(請參閱上一個問題)相似,但它們的方向相反。同樣,如果 .net 框架開發(fā)工具不能自動生成包裝,或者如果自動方式不是您所需要的,則可以開發(fā)自定義的 ccw。

返回頁首

是否可以在 .net 框架程序中使用 win32 api?
是。使用 p/invoke,.net 框架程序可以通過靜態(tài) dll 入口點的方式來訪問本機(jī)代碼庫。

下面是 c# 調(diào)用 win32 messagebox 函數(shù)的示例:

using system;
using system.runtime.interopservices;

class mainapp
{
[dllimport("user32.dll", entrypoint="messagebox")]
public static extern int messagebox(int hwnd, string strmessage, string strcaption, uint uitype);

public static void main()
{
messagebox( 0, "您好,這是 pinvoke!", ".net", 0 );
}
}
返回頁首

安全性
如何使代碼與安全系統(tǒng)協(xié)調(diào)工作?
通常,這不成問題——大多數(shù)應(yīng)用程序能安全地運行,不會受惡意攻擊的干擾。通過簡單地使用標(biāo)準(zhǔn)類庫來訪問資源(如文件)或執(zhí)行受保護(hù)的操作(例如反轉(zhuǎn)類型的私有成員),安全性由這些庫來實施。應(yīng)用程序開發(fā)者需要完成的一項簡單工作是包括權(quán)限請求(一種公開的安全性),將代碼可能接收的權(quán)限限制在它所需要的權(quán)限范圍內(nèi)。這也確保了如果代碼被允許運行,它在運行時將具有所需的所有權(quán)限。

僅當(dāng)開發(fā)人員需要編寫提供新型資源的新基類庫時,他們才需要直接處理安全系統(tǒng)。在這種情況下,并非所有的代碼都有潛在的安全性問題,代碼訪問安全機(jī)制將其限制在替代了安全系統(tǒng)的那部分代碼上。

返回頁首

為什么在網(wǎng)絡(luò)共享驅(qū)動器中運行代碼時會發(fā)生安全異常?
默認(rèn)安全策略僅給來自本地 intranet 區(qū)域的代碼授予有限的權(quán)限。這個區(qū)域是由 internet explorer 安全設(shè)置定義的,它們應(yīng)該配置為與企業(yè)內(nèi)部的本地網(wǎng)絡(luò)相匹配。由于由 unc 或映射驅(qū)動器(例如使用 net use 命令)命名的文件都需要在本地網(wǎng)絡(luò)上發(fā)送,因此它們也在本地 intranet 區(qū)域中。

默認(rèn)值是為不安全的 intranet 這種最壞情況而設(shè)置的。如果您的 intranet 比較安全,您可以修改安全策略(用 caspol 工具),給本地 intranet 或其一部分(例如特定的計算機(jī)共享名)授予更多的權(quán)限。

返回頁首

如何編寫代碼,使它在安全系統(tǒng)停止該代碼時運行?
當(dāng)代碼試圖執(zhí)行未經(jīng)授權(quán)的操作時,將發(fā)生安全異常。權(quán)限是基于代碼(尤其是其位置)來授予的。例如,從 internet 中運行的代碼所得到的權(quán)限比在本地計算機(jī)上運行的代碼所得到的權(quán)限要少,這是因為經(jīng)驗證明,它的可靠性要低一些。因此,要運行由于安全異常而失敗的代碼,您必須增加授予它的權(quán)限。一個簡單的方法是將代碼移到更受信任的位置(例如本地文件系統(tǒng))。但這種方法并不是在任何情況下都有效(web 應(yīng)用程序是一個很好的例子,企業(yè)網(wǎng)絡(luò)上的 intranet 應(yīng)用程序是另一個例子)。因此,不要改變代碼位置,而是通過更改安全策略給該位置授予更多的權(quán)限。請使用代碼訪問安全策略工具 (caspol.exe) 或圖形化管理工具(在 beta 2 和更高版本中可以得到)來執(zhí)行此操作。如果您是代碼的開發(fā)人員或發(fā)行者,您也可以對它進(jìn)行數(shù)字簽名,然后修改安全策略,給帶有該數(shù)字簽名的代碼授予更多權(quán)限。但是,在執(zhí)行上述任何操作時,請記住此代碼被授予較少的權(quán)限,是因為它不是來自受信任的來源——在將代碼移至本地計算機(jī)或更改安全策略以前,您應(yīng)該確保這些代碼不會執(zhí)行惡意或損壞性的操作。

返回頁首

如何管理個人或企業(yè)計算機(jī)的安全性?
目前,caspol 命令行工具是管理安全性的唯一方法。安全策略由兩個級別組成:按計算機(jī)和按用戶。我們計劃在 .net 框架第一版中提供全面的管理工具以及企業(yè)策略管理支持。

返回頁首

基于證據(jù)的安全性是如何與 windows 2000 安全性配合工作的?
基于證據(jù)的安全性(基于授權(quán)碼)能與 windows 2000 安全性(基于登錄身份標(biāo)識)配合工作。例如,要訪問一個文件,托管代碼必須具有代碼訪問安全文件權(quán)限,也必須在具有 ntfs 文件訪問權(quán)限的登錄身份標(biāo)識下運行。.net 框架中包括的托管庫也為基于角色的安全性提供了類。這些都使應(yīng)用程序能夠與 windows 登錄身份標(biāo)識及用戶組配合工作。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 奉节县| 曲水县| 黄大仙区| 陆河县| 海门市| 台中县| 宣汉县| 兴宁市| 思茅市| 阿合奇县| 泸溪县| 元谋县| 漳浦县| 武宁县| 茂名市| 凤台县| 屏东县| 正阳县| 武隆县| 榆树市| 延川县| 繁昌县| 砚山县| 当涂县| 仙桃市| 科尔| 莆田市| 沙洋县| 婺源县| 广水市| 博野县| 铁岭市| 陵川县| 乌兰察布市| 大余县| 宜阳县| 秭归县| 凤台县| 大关县| 常熟市| 句容市|