畢業(yè)設(shè)計(jì)外文翻譯_第1頁(yè)
畢業(yè)設(shè)計(jì)外文翻譯_第2頁(yè)
畢業(yè)設(shè)計(jì)外文翻譯_第3頁(yè)
畢業(yè)設(shè)計(jì)外文翻譯_第4頁(yè)
畢業(yè)設(shè)計(jì)外文翻譯_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、南京郵電大學(xué)畢業(yè)設(shè)計(jì)(論文)外文資料翻譯學(xué) 院專業(yè)學(xué)生姓名班級(jí)學(xué)號(hào)外文出處附件:1.外文資料翻譯譯文;2.外文原文指導(dǎo)教師評(píng)價(jià):1翻譯內(nèi)容與課題的結(jié)合度: 優(yōu) 良 中 差2翻譯內(nèi)容的準(zhǔn)確、流暢: 優(yōu) 良 中 差3專業(yè)詞匯翻譯的準(zhǔn)確性: 優(yōu) 良 中 差4翻譯字符數(shù)是否符合規(guī)定要求: 符合 不符合指導(dǎo)教師簽名:年月日附件1:外文資料翻譯譯文非常ASP.NET1.1Web 部署項(xiàng)目當(dāng)ASP 第一次發(fā)布時(shí),Web 編程還比較困難,因?yàn)樾枰?IIS 來(lái)處理 ASP 頁(yè)。后來(lái),ASP.NET 2.0 和 Visual Studio 2005 通過(guò)引入網(wǎng)站開(kāi)發(fā)模型使一切工作都變得容易了。借助該網(wǎng)站模型,您不

2、必在 Visual Studio 中創(chuàng)建新項(xiàng)目,而是可以指向一個(gè)目錄并開(kāi)始編寫(xiě)網(wǎng)頁(yè)和代碼。此外,您還可以使用內(nèi)置的 ASP.NET Development Server 快速測(cè)試站點(diǎn),ASP.NET Development Server 將 ASP.NET 寄宿在一個(gè)本地進(jìn)程中,并消除了必須安裝 IIS 才能進(jìn)行開(kāi)發(fā)這一先決條件。該網(wǎng)站模型的魅力在于您在開(kāi)發(fā) Web 應(yīng)用程序時(shí)無(wú)需考慮打包和部署。需要其他類時(shí)怎么辦?向 App_Code 目錄添加一個(gè) .cs 文件即可開(kāi)始編寫(xiě)。希望將可本地化的字符串存儲(chǔ)在資源文件中時(shí)怎么辦?向 App_GlobalResources 目錄添加一個(gè) .resx

3、文件并鍵入字符串。一切都順順當(dāng)當(dāng);您根本就不必考慮編譯和部署方面的事情。 在準(zhǔn)備進(jìn)行部署時(shí),您有多種可選方案。最簡(jiǎn)單的方案是將文件復(fù)制到主運(yùn)行服務(wù)器并按要求編譯每一個(gè)文件(和在測(cè)試環(huán)境中一樣)。第二種方案是使用 aspnet_compiler.exe 實(shí)用工具將應(yīng)用程序預(yù)編譯為二進(jìn)制版本,之后將只剩下要放到服務(wù)器上的一組程序集、靜態(tài)內(nèi)容和配置文件。第三種方案也使用 aspnet_compiler.exe,但要?jiǎng)?chuàng)建一個(gè)可更新的二進(jìn)制部署,其中 .as*x 文件保持不變(并且可修改),而所有代碼文件都編譯為二進(jìn)制程序集。這似乎涵蓋了每一種可能的情況,開(kāi)發(fā)人員可以一心一意地編寫(xiě) Web 應(yīng)用程序,而

4、在以后實(shí)際部署時(shí)再作打包和部署決定。不過(guò),此模型也遭到了相當(dāng)大的反對(duì),特別是那些習(xí)慣了自己開(kāi)發(fā)的 Web 項(xiàng)目是在實(shí)際項(xiàng)目文件中指定的實(shí)際項(xiàng)目的開(kāi)發(fā)人員的反對(duì),這些項(xiàng)目允許注入生成前和生成后函數(shù)、從生成過(guò)程排除文件以及使用命令行開(kāi)關(guān)在調(diào)試和發(fā)布版本之間進(jìn)行切換等操作。有鑒于此,Microsoft 迅速推出了 Web 應(yīng)用程序項(xiàng)目(即 WAP),最初它是作為 Visual Studio 2005 的插件發(fā)布的,現(xiàn)在包含在 Visual Studio 2005 Service Pack 1 (SP1) 中,Visual Studio 2005 Service Pack 1 (SP1) 可從 msd

5、/vstudio/support/vs2005sp1 下載。WAP 可替代與 Visual Studio .NET 2005 Web 項(xiàng)目模型非常接近的網(wǎng)站模型。新的 WAP 模型會(huì)在生成過(guò)程中編譯所有源代碼文件,并在本地的 /bin 目錄中生成一個(gè)用于部署的程序集。WAP 還使得增量采用 ASP.NET 2.0 引入的新的分部類代碼隱藏模型變得更加容易,因?yàn)楝F(xiàn)在您可以打開(kāi) Visual Studio .NET 2003 項(xiàng)目,并且在轉(zhuǎn)換過(guò)程中只修改 .sln 和 .csproj(或 .vbproj)文件。然后可將每個(gè)文件及其代碼隱藏類轉(zhuǎn)換為與項(xiàng)目中任何其他文件都

6、無(wú)關(guān)的新的分部類模型(操作方法是:在解決方案資源管理器中右鍵單擊各個(gè)文件并選擇“轉(zhuǎn)換為 Web 應(yīng)用程序”),也可以讓它們?nèi)匀皇褂门f模型。這與將 Visual Studio .NET 2003 Web 項(xiàng)目轉(zhuǎn)換為網(wǎng)站模型大不相同,轉(zhuǎn)換為網(wǎng)站模型會(huì)同時(shí)轉(zhuǎn)換所有文件,并且不支持增量采用。最后,還有一個(gè)稱為“Web 部署項(xiàng)目”(本專欄的主題)的新項(xiàng)目類型,它引入了許多既針對(duì)網(wǎng)站項(xiàng)目又針對(duì) Web 應(yīng)用程序項(xiàng)目的附加部署選項(xiàng)。 Web 部署項(xiàng)目彌補(bǔ)了既針對(duì)網(wǎng)站應(yīng)用程序又針對(duì) Web 應(yīng)用程序項(xiàng)目的部署選項(xiàng)中的遺留漏洞,并且可以簡(jiǎn)單而又可擴(kuò)展地實(shí)現(xiàn)幾乎任何部署方案。 為確切了解這一新項(xiàng)目類型增加了哪些內(nèi)

7、容,我們先來(lái)回顧一下在 Web 部署項(xiàng)目推出之前的情況。使用網(wǎng)站模型生成應(yīng)用程序時(shí),您可以選擇對(duì)部署站點(diǎn)進(jìn)行預(yù)編譯。通過(guò) Visual Studio 2005 中的“生成”|“發(fā)布”菜單或直接通過(guò)命令行實(shí)用工具 aspnet_compiler.exe,您可以訪問(wèn)預(yù)編譯實(shí)用工具。顯示了 Visual Studio 所顯示的此工具的界面。使用發(fā)布實(shí)用工具時(shí)必須作出的第一個(gè)決定是 .as*x 文件在部署后是否可更新(在 aspnet_compiler.exe 命令行實(shí)用工具中使用 -u 開(kāi)關(guān)的“允許更新此預(yù)編譯站點(diǎn)”選項(xiàng))。 此決定取決于在部署后是否希望能夠在不重復(fù)整個(gè)部署過(guò)程的情況下對(duì)網(wǎng)頁(yè)進(jìn)行較少

8、更改。事實(shí)上,您可能希望明確禁止對(duì)已部署網(wǎng)頁(yè)進(jìn)行任何修改,并要求所有修改都要遵循標(biāo)準(zhǔn)的部署(也希望遵循標(biāo)準(zhǔn)的測(cè)試)過(guò)程,在這種情況下,應(yīng)選擇將站點(diǎn)發(fā)布為不可更新。將站點(diǎn)發(fā)布為不可更新時(shí),您可以完全刪除所有 .as*x 文件,而只發(fā)布二進(jìn)制程序集(以及配置文件和靜態(tài)內(nèi)容)。不過(guò),如果沒(méi)有物理文件,ASP.NET 將無(wú)法確定哪些類要用于哪些端點(diǎn)請(qǐng)求。例如,如果您的應(yīng)用程序收到一個(gè)請(qǐng)求 Page1.aspx 的請(qǐng)求,而您已經(jīng)使用了不可更新的二進(jìn)制部署,則磁盤(pán)上很可能沒(méi)有任何 Page1.aspx 文件,并且現(xiàn)有配置文件中沒(méi)有任何內(nèi)容來(lái)指示部署到 /bin 目錄的程序集集合中哪個(gè)類應(yīng)是該請(qǐng)求的實(shí)際處理

9、程序。為彌補(bǔ)這一缺陷,編譯過(guò)程還將生成一個(gè) .compiled 文件集合,這些文件以簡(jiǎn)單的 XML 格式包含端點(diǎn)-類型映射和文件依賴關(guān)系信息,同時(shí)這些文件必須與所部署站點(diǎn)的 /bin 目錄中的二進(jìn)制程序集一起發(fā)布。例如,如果應(yīng)用程序中原來(lái)有一個(gè)名為 Page1.aspx 的頁(yè),則 aspnet_compiler.exe 實(shí)用工具會(huì)生成一個(gè)名為 piled(哈希代碼不定)的文件,其中包含以下 XML: 使用此實(shí)用工具發(fā)布網(wǎng)站時(shí)必須作出的另一個(gè)重要決定是確定生成的程序集的打包粒度。通過(guò)選中“使用固定命名和單頁(yè)程序集”(或在 aspnet_compile

10、r.exe 命令行實(shí)用工具中使用 -fixednames),既可為站點(diǎn)中的每個(gè)目錄創(chuàng)建單獨(dú)的程序集,又可為站點(diǎn)中的每個(gè)可編譯文件創(chuàng)建單獨(dú)的程序集。作出該決定并不像您可能想像的那么容易,因?yàn)槊總€(gè)選項(xiàng)都有其潛在問(wèn)題。如果決定不使用 -fixednames 選項(xiàng),則每次發(fā)布應(yīng)用程序時(shí)都會(huì)生成一組全新的程序集,并且它們的名稱與之前發(fā)布的程序集不同。這意味著部署更加復(fù)雜,因?yàn)樵诓渴鹦碌某绦蚣氨仨殑h除主運(yùn)行服務(wù)器上所有以前發(fā)布的程序集,否則在處理下一個(gè)請(qǐng)求時(shí)將生成冗余的類定義錯(cuò)誤。使用 -fixednames 選項(xiàng)可以解決此問(wèn)題,因?yàn)槊總€(gè)文件都將與命名清晰的程序集對(duì)應(yīng),而這些程序集在一次編譯和下次編譯

11、中不會(huì)發(fā)生變化。不過(guò),如果站點(diǎn)規(guī)模較大,則為每個(gè)網(wǎng)頁(yè)、控件和母版頁(yè)分別生成單獨(dú)的程序集,很明顯意味著您要管理成百上千個(gè)程序集的發(fā)布。Web 部署項(xiàng)目非常圓滿地解決了部署中程序集粒度這一問(wèn)題,如下所示。您還可以將程序集簽名引入編譯過(guò)程,以便創(chuàng)建具有強(qiáng)名稱的不同版本的程序集,如果需要這也適用于全局程序集緩存 (GAC) 中的部署。通過(guò)使用 -aptca 選項(xiàng),您可以使用程序集級(jí)別的屬性 AllowPartiallyTrustedCallers 來(lái)標(biāo)記生成的程序集,在將任何程序集部署到 GAC 并且以低等或中等信任級(jí)別運(yùn)行 ASP.NET 的情況下,這是必要的。(請(qǐng)注意,此屬性應(yīng)僅應(yīng)用于已證明不會(huì)暴

12、露任何安全漏洞的程序集,因?yàn)槿缬新┒矗褂么藢傩钥赡苷兄乱T攻擊。)有關(guān)發(fā)布站點(diǎn)的另一個(gè)細(xì)節(jié)是如果決定使用 Web 應(yīng)用程序項(xiàng)目而不使用網(wǎng)站模型,則“生成”|“發(fā)布”對(duì)話框的外觀將大不相同。Web 應(yīng)用程序項(xiàng)目假定您希望將應(yīng)用程序發(fā)布為可更新的 .as*x 文件和預(yù)編譯的源文件(開(kāi)發(fā)中它所使用的同一模型),因此僅針對(duì)二進(jìn)制的部署選項(xiàng)不可用。此實(shí)用工具實(shí)質(zhì)上更接近于“復(fù)制網(wǎng)站”實(shí)用工具(隨網(wǎng)站一起提供)而不是“發(fā)布網(wǎng)站”實(shí)用工具,因?yàn)樗枰獜?fù)制由標(biāo)準(zhǔn)生成過(guò)程生成的文件。從技術(shù)上講,即使您使用 Web 應(yīng)用程序項(xiàng)目,也不會(huì)限制您使用僅針對(duì)二進(jìn)制(不可更新)的部署。其實(shí),WAP 生成的輸出是一個(gè)有效

13、的網(wǎng)站,然后您可以傳遞 aspnet_compiler.exe 實(shí)用工具來(lái)生成創(chuàng)建二進(jìn)制部署。幸運(yùn)的是,您只是不能從 Web 部署項(xiàng)目調(diào)整過(guò)的 Visual Studio 2005 界面調(diào)用它而已。Web 部署項(xiàng)目那么迄今為止所有現(xiàn)有的編譯和部署選項(xiàng)中缺少什么呢?主要缺少兩種功能:控制程序集命名(特別是為了進(jìn)行部署)的功能,以及將所有輸出的程序集合并為一個(gè)程序集從而簡(jiǎn)化部署的功能。Web 部署項(xiàng)目可以解決這兩個(gè)問(wèn)題。但或許更重要的是,它們還與網(wǎng)站應(yīng)用程序和 Web 應(yīng)用程序項(xiàng)目的部署問(wèn)題中的許多遺留問(wèn)題有關(guān)。它們的核心是,Web 部署項(xiàng)目(可從 /aa.a

14、spx 下載)代表的只是向您解決方案中添加的另一個(gè)項(xiàng)目類型。與所有 Visual Studio 項(xiàng)目文件一樣,Web 部署項(xiàng)目也是可在 IDE 中直接編譯或從命令行運(yùn)行的 MSBuild 腳本。不過(guò),Web 部署項(xiàng)目包含用于編譯和打包網(wǎng)站(或 Web 應(yīng)用程序項(xiàng)目)的生成命令,而不指定要編譯的源代碼文件集合。這意味著它們會(huì)調(diào)用 aspnet_compiler.exe 實(shí)用工具(以及其他實(shí)用工具)來(lái)創(chuàng)建特定 Web 應(yīng)用程序的部署。Web 部署項(xiàng)目是作為 Visual Studio 插件包提供的,其中包含了一個(gè)用于注入新項(xiàng)目的易用菜單項(xiàng)和一個(gè)用于控制所有可用設(shè)置的完整屬性頁(yè)集。若要向現(xiàn)有應(yīng)用程序

15、中添加新項(xiàng)目,可右鍵單擊現(xiàn)有網(wǎng)站(或 Web 應(yīng)用程序項(xiàng)目),然后選擇“添加 Web 部署項(xiàng)目”項(xiàng)。此操作將把一個(gè)包含 MSBuild 腳本的新 .wdproj 文件添加到您的解決方案中,并會(huì)生成您所創(chuàng)建的應(yīng)用程序的部署。將 Web 部署項(xiàng)目添加到您的解決方案之后,您就可以通過(guò)訪問(wèn)項(xiàng)目文件的屬性頁(yè)來(lái)精確控制項(xiàng)目的用途。新部署項(xiàng)目的默認(rèn)設(shè)置是以可更新模式部署應(yīng)用程序,所有 .as*x 文件都將保持不變,源文件則編譯為部署在頂級(jí) /bin 目錄中的一個(gè)程序集。不管源應(yīng)用程序使用網(wǎng)站模型還是使用 Web 應(yīng)用程序項(xiàng)目模型,這些部署項(xiàng)目的作用都是相同的,這意味著無(wú)論您現(xiàn)在選擇哪個(gè)開(kāi)發(fā)模型都不會(huì)影響您的

16、部署選項(xiàng)。Web 部署項(xiàng)目最重要的功能之一是它能夠?qū)⑺胁渴鸲寂渲脼槎M(jìn)制(不可更新)- 一個(gè)程序集,您可以為該程序集選擇名稱。使用此部署模型意味著,您只需將一個(gè)程序集放到活動(dòng)站點(diǎn)的 /bin 目錄中即可更新整個(gè)站點(diǎn),并且在部署或處理導(dǎo)致錯(cuò)誤的已部分部署的站點(diǎn)之前無(wú)需刪除現(xiàn)有程序集。為端點(diǎn)映射部署 .compiled 文件仍是必需的,但只有當(dāng)您在站點(diǎn)中添加、刪除或移動(dòng)頁(yè)時(shí)這些文件才會(huì)發(fā)生變化。Web 部署項(xiàng)目提供了部署靈活性,使您可以在作出打包和部署決定時(shí)無(wú)需考慮 Web 應(yīng)用程序的實(shí)際生成過(guò)程。借助 aspnet_compiler.exe 實(shí)用工具,ASP.NET 2.0 的原始版本部分地實(shí)

17、現(xiàn)了開(kāi)發(fā)和部署之間的這種獨(dú)立性,但由于執(zhí)行部署時(shí)的各種約束從未完全實(shí)現(xiàn)。Web 部署項(xiàng)目則已完全實(shí)現(xiàn)了開(kāi)發(fā)和部署的分離,有關(guān)應(yīng)用程序如何生成的決定將不再影響部署選擇。合并程序集 Web 部署項(xiàng)目的功能主要是對(duì)通過(guò) MSBuild 任務(wù)和新界面提供的現(xiàn)有實(shí)用工具進(jìn)行重新打包,但除此之外還提供了幾個(gè)全新功能。其中最引人關(guān)注的功能是程序集合并功能。安裝 Web 部署項(xiàng)目時(shí),您會(huì)發(fā)現(xiàn)安裝目錄(默認(rèn)情況下是 %PROGRAMFILES%MSBuildMicrosoftWebDeploymentv8.0)中有一個(gè)名為 aspnet_merge.exe 的可執(zhí)行文件。該可執(zhí)行文件能夠提取預(yù)編譯站點(diǎn)的多個(gè)程序

18、集輸出并將這些程序集合并為一個(gè)程序集。如果選中 Web 部署項(xiàng)目中的合并選項(xiàng),則該實(shí)用工具即可集成到生成腳本中。為了說(shuō)明該實(shí)用工具的功能,我們來(lái)看一個(gè)沒(méi)有可更新開(kāi)關(guān)的預(yù)編譯網(wǎng)站的輸出。該輸出的源應(yīng)用程序包含兩個(gè)子目錄、一個(gè)頂級(jí) global.asax 文件、一個(gè)在 App_Code 中定義的類以及一個(gè)用戶控件。最終的編譯結(jié)果是五個(gè)不同的程序集和一個(gè) .compiled 文件集合。如果在此目錄上運(yùn)行 aspnet_merge.exe 實(shí)用工具(使用 -o 開(kāi)關(guān))來(lái)請(qǐng)求一個(gè)程序集輸出,結(jié)果將是一個(gè)可管理性大大提高的單一程序集,其名稱可以隨意指定。雖然隨 Web 部署項(xiàng)目一起提供的 aspnet_m

19、erge.exe 實(shí)用工具和相應(yīng)的 MSBuild 任務(wù)是新的,但自從微軟研究院將 Microsoft .NET Framework 1.1 包裝成名為 ILMerge 的實(shí)用工具以來(lái),用于合并程序集的基礎(chǔ)技術(shù)實(shí)際上就已經(jīng)誕生了。ILMerge 的最新版本可從 /mbarnett/ILMerge.aspx 下載。此實(shí)用工具現(xiàn)已直接集成到 aspnet_merge.exe 中,用于執(zhí)行與合并程序集相關(guān)的所有繁重任務(wù)。其實(shí),程序集合并是一項(xiàng)相當(dāng)復(fù)雜的任務(wù)。您需要考慮簽名、版本控制、其他程序集級(jí)別的屬性、嵌入式資源和 XML 文檔,同時(shí)還要管理沖突類型名稱

20、的詳細(xì)信息等內(nèi)容。ILMerge 實(shí)用工具可以為您管理所有這些內(nèi)容,并用開(kāi)關(guān)來(lái)控制有關(guān)該過(guò)程的各種決定。使用該實(shí)用工具還可以將 .exe 程序集轉(zhuǎn)換為 .dll 程序集以便打包。例如,假定您有三個(gè)程序集:a.dll、b.dll 和 c.exe,并要將它們合并為一個(gè)庫(kù)程序集。只要類型名稱中沒(méi)有沖突,下面的命令行就會(huì)生成一個(gè)新庫(kù) d.dll,其中包含在 a.dll、b.dll 和 c.exe 中定義的所有類型: ilmerge.exe /t:library /ndebug /out:d.dll a.dll b.dll c.exe可插入配置文件Web 部署項(xiàng)目提供的另一個(gè)全新功能是創(chuàng)建可插入配置文件

21、。部署 Web 應(yīng)用程序時(shí),要確定一種方法來(lái)管理開(kāi)發(fā)與部署之間配置文件的差別是一個(gè)常見(jiàn)問(wèn)題。例如,您的一個(gè)本地測(cè)試數(shù)據(jù)庫(kù)可能用于運(yùn)行站點(diǎn),另一個(gè)數(shù)據(jù)庫(kù)用于暫存服務(wù)器,還有一個(gè)數(shù)據(jù)庫(kù)用于主運(yùn)行服務(wù)器。如果將連接字符串存儲(chǔ)在 web.config 中(通常是在 connectionStrings 部分),那么在將應(yīng)用程序推送到暫存服務(wù)器或?qū)嶋H工作環(huán)境時(shí),就需要通過(guò)某種方式來(lái)修改這些字符串。Web 部署項(xiàng)目通過(guò)一個(gè)稱為 ReplaceConfigSections 的新 MSBuild 任務(wù)提供了一個(gè)針對(duì)此問(wèn)題的完全解決方案。通過(guò)此任務(wù),您可以指定根據(jù)解決方案配置獨(dú)立存儲(chǔ)特定配置部分內(nèi)容的獨(dú)立文件。例

22、如,您可以創(chuàng)建一個(gè) debugconnectionstrings.config 文件來(lái)存儲(chǔ)如下所示的 connectionStrings 配置部分的調(diào)試版本: 與此類似,接下來(lái)您可以為所定義的每個(gè)解決方案配置(發(fā)布、暫存等)創(chuàng)建單獨(dú)的文件,并用它們各自部署環(huán)境所需的連接字符串進(jìn)行填充。對(duì)于發(fā)布配置,可將文件命名為 releaseconnectionstrings.config,并按如下方式填充: 接下來(lái),您可以對(duì)由 Web 部署項(xiàng)目添加的 MSBuild 腳本進(jìn)行配置,以說(shuō)明應(yīng)替換主 web.config 文件中的哪些配置部分以及將提供替換內(nèi)容的源文件。您可以手動(dòng)修改腳本,但 Visual S

23、tudio 中生成腳本的屬性頁(yè)提供的漂亮界面可以為您代勞。在此例中,您是在設(shè)置調(diào)試解決方案配置的屬性,因此選中“啟用 Web.config 文件部分替換”選項(xiàng)并指定要隨該文件一起替換為相應(yīng)內(nèi)容的部分: connectionStrings=debugconnectionstrings.config您可使用同一對(duì)話框頁(yè)以相應(yīng)的文件來(lái)設(shè)置發(fā)布解決方案配置(以及我們已定義的任何其他配置)的配置替換。在隨后運(yùn)行生成腳本時(shí),ReplaceConfigSections 任務(wù)會(huì)從任何關(guān)聯(lián)的配置文件中提取內(nèi)容,并替換相應(yīng)配置部分的內(nèi)容,同時(shí)創(chuàng)建一個(gè)放到部署目錄的新 web.config 文件。這種配置文件替換功

24、能意味著您可以借助由源代碼管理進(jìn)行版本控制的文本文件,以一種易于管理的方式來(lái)維護(hù)部署環(huán)境之間的配置差異,并且不必使用提醒您在部署時(shí)更改連接字符串的粘滯便箋。應(yīng)予以強(qiáng)調(diào)的是,此功能適用于配置文件的任何部分,包括自定義部分,因此如果其他配置部分(例如,appSettings)有差異,您也可以使用此生成任務(wù)輕松指定這些差異。創(chuàng)建可重用用戶控件Web 部署項(xiàng)目有一個(gè)有趣的附帶應(yīng)用程序,該應(yīng)用程序解決了一個(gè)已困擾 ASP.NET 開(kāi)發(fā)人員多年的問(wèn)題,即如何創(chuàng)建可重用用戶控件以便進(jìn)行跨應(yīng)用程序共享。用戶控件實(shí)質(zhì)上就是復(fù)合的自定義控件,其子控件位于 .ascx 文件中。能夠?qū)⒃O(shè)計(jì)器用于布局控件和添加處理程序

25、對(duì)于大多數(shù)開(kāi)發(fā)人員來(lái)說(shuō)都是一個(gè)巨大幫助,因?yàn)樵诟杏X(jué)上這和生成網(wǎng)頁(yè)幾乎完全相同,不同的是得到的 .ascx 文件可作為控件包含在任何網(wǎng)頁(yè)中。而一直存在的不足是需要在應(yīng)用程序的目錄中保留實(shí)際的 .ascx 文件才能真正使用它。盡管已有用于實(shí)現(xiàn)跨應(yīng)用程序共享 .ascx 控件的技術(shù),但這些技術(shù)通常都涉及許多繁瑣事務(wù)(如在應(yīng)用程序之間創(chuàng)建共享虛擬目錄或在請(qǐng)求時(shí)搜集由 ASP.NET 生成的臨時(shí)程序集),并且從未讓人感到滿意。版本 2.0 中引入的 aspnet_compiler.exe 實(shí)用工具提供了一個(gè)比較好的解決方案。借助此編譯器,您可以創(chuàng)建一個(gè)僅由用戶控件組成的網(wǎng)站,并以不可更新模式發(fā)布該站點(diǎn),

26、以便生成可重用程序集。獲得生成的程序集后,您可以將其部署到任何 Web 應(yīng)用程序并像引用自定義控件那樣引用該用戶控件(而不是像針對(duì) .ascx 文件那樣使用 src 屬性)。此技術(shù)的唯一缺點(diǎn)是,您要么必須接受由編譯過(guò)程生成的隨機(jī)命名程序集,要么必須選中編譯器中的 fixednames 選項(xiàng),以便為站點(diǎn)中的每個(gè)母版頁(yè)各生成名稱固定的程序集(而不是為整個(gè)集合只生成一個(gè)程序集)。Web 部署項(xiàng)目提供了用于創(chuàng)建真正可重用的用戶控件程序集的決定性步驟。您可以使用只包含用戶控件的網(wǎng)站,并通過(guò)添加 Web 部署項(xiàng)目來(lái)創(chuàng)建具有所選名稱的單一輸出程序集。創(chuàng)建一個(gè)要部署到 GAC 的簽名程序集會(huì)更簡(jiǎn)單直接,這樣無(wú)

27、需在每個(gè) /bin 目錄中重新部署該程序集即可實(shí)現(xiàn)跨多個(gè)應(yīng)用程序的控件共享。Web 部署項(xiàng)目的推出令人非常滿意地完善了用于部署 ASP.NET 應(yīng)用程序的工具集。現(xiàn)在可以用從所有源到所有二進(jìn)制的任何方式部署應(yīng)用程序,并且可以完全控制二進(jìn)制程序集的生成、打包和命名。此外,Web 部署項(xiàng)目還提供了一個(gè)解決方案以便根據(jù)目標(biāo)版本替換配置文件的各部分,并解決了可重用用戶控件的分發(fā)問(wèn)題。正在構(gòu)建和部署 ASP.NET 應(yīng)用程序的任何人肯定都會(huì)發(fā)現(xiàn) Web 部署項(xiàng)目的某些方面非常有用,足以吸引他們立即開(kāi)始使用 Web 部署項(xiàng)目1.2使用 AJAX Extensions 客戶端進(jìn)行 Web 服務(wù)調(diào)用從根本上講

28、,ASP.NET 自始至終都是一項(xiàng)服務(wù)器端技術(shù)。當(dāng)然,在某些情況下 ASP.NET 會(huì)生成客戶端 JavaScript,特別是在驗(yàn)證控件中以及在新推出的 Web 部件基礎(chǔ)結(jié)構(gòu)中,但它通常只是簡(jiǎn)單地將客戶端屬性轉(zhuǎn)換成客戶端行為。作為開(kāi)發(fā)人員,在收到下一個(gè) POST 請(qǐng)求之前不必考慮與客戶端進(jìn)行交互。對(duì)于需要使用客戶端 JavaScript 和 DHTML 構(gòu)建更具交互性的頁(yè)面的開(kāi)發(fā)人員而言,則需要在 ASP.NET 2.0 腳本回調(diào)功能提供的一些幫助下自己編寫(xiě)代碼。這一情況在去年得到了徹底改變。在 2005 年 9 月的 Microsoft 在 Microsoft 專業(yè)開(kāi)發(fā)人員大會(huì)上發(fā)布了一個(gè)新

29、的 ASP.NET 插件(代號(hào)為“Atlas”),主要是為了充分利用客戶端 JavaScript、DHTML 和 XMLHttpRequest 對(duì)象。其目的是幫助開(kāi)發(fā)人員創(chuàng)建更具交互性的支持 AJAX 的 Web 應(yīng)用程序。此框架從此更名為正式名稱 Microsoft AJAX Library 和 ASP.NET 2.0 AJAX Extensions,它提供了許多出色的功能,包括客戶端數(shù)據(jù)綁定、DHTML 動(dòng)畫(huà)和行為以及使用 UpdatePanel 實(shí)現(xiàn)的完善的對(duì)客戶端 POST 回調(diào)的攔截。這些功能中的許多功能依賴的是以易于通過(guò)客戶端 JavaScript 調(diào)用進(jìn)行分析和交互的形式從服務(wù)器

30、異步檢索數(shù)據(jù)的能力。本月專欄的主題便是這一新的非常有用的能力,即在支持 ASP.NET 2.0 AJAX Extensions 的頁(yè)面中通過(guò)客戶端 JavaScript 調(diào)用服務(wù)器端 Web 服務(wù)的能力。使用 AJAX 調(diào)用 Web 服務(wù) 如果您曾經(jīng)使用過(guò) Microsoft .NET Framework 中的 Web 服務(wù),無(wú)論是使用 wsel.exe 實(shí)用程序創(chuàng)建代理還是使用 Visual Studio 的“添加 Web 引用”功能,您就會(huì)習(xí)慣于使用 .NET 類型調(diào)用 Web 服務(wù)。實(shí)際上,通過(guò) .NET 代理調(diào)用 Web 服務(wù)方法與在其他類上調(diào)用方法非常相似。代理會(huì)根據(jù)您傳遞的參數(shù)準(zhǔn)備

31、 XML,它會(huì)妥善地將它收到的 XML 響應(yīng)轉(zhuǎn)換成代理方法指定的 .NET 類型。開(kāi)發(fā)人員可以非常方便地利用 .NET Framework 使用 Web 服務(wù)端點(diǎn),這也使目前面向服務(wù)的應(yīng)用程序變得可行。ASP.NET 2.0 AJAX Extensions 使得在瀏覽器中運(yùn)行的客戶端 JavaScript 實(shí)現(xiàn)了無(wú)縫的、與 Web 服務(wù)完全相同的代理生成體驗(yàn)。您可以編寫(xiě)一個(gè)在您的服務(wù)器上承載的 .asmx 文件,并通過(guò)一個(gè)客戶端 JavaScript 類調(diào)用該服務(wù)上方法。例如,圖1 顯示了一個(gè)簡(jiǎn)單的 .asmx 服務(wù),該服務(wù)實(shí)現(xiàn)了模擬的股票報(bào)價(jià)檢索(使用隨機(jī)數(shù)據(jù))。除了標(biāo)準(zhǔn)的 .asmx We

32、b 服務(wù)屬性外,此服務(wù)還增添了 ScriptService 屬性,使其同樣可適用于 JavaScript 客戶端。如果此 .asmx 文件部署在支持 ASP.NET AJAX 的 Web 應(yīng)用程序中,您可以通過(guò)為您的 .aspx 文件中的 ScriptManager 控件添加 ServiceReference,從 JavaScript 調(diào)用服務(wù)的方法(當(dāng)您使用支持 ASP.NET AJAX 的網(wǎng)站模板在 Visual Studio 中創(chuàng)建網(wǎng)站時(shí),此控件會(huì)自動(dòng)添加到您的 default.aspx 頁(yè)面中): 現(xiàn)在您可以通過(guò)任何客戶端 JavaScript 例程,使用 MsdnMagazine.S

33、tockQuoteService 類調(diào)用服務(wù)的任何方法。由于調(diào)用的基本機(jī)制在本質(zhì)上是異步的,因此沒(méi)有同步方法可用。每個(gè)代理方法帶有一個(gè)額外的參數(shù)(除了標(biāo)準(zhǔn)的輸入?yún)?shù)外),該參數(shù)引用了另一個(gè)在該方法完成時(shí)異步調(diào)用的客戶端 JavaScript 函數(shù)。顯示的示例頁(yè)面使用客戶端 JavaScript 將調(diào)用股票報(bào)價(jià) Web 服務(wù)的結(jié)果顯示在頁(yè)面上的標(biāo)簽 (span) 中。如果客戶端 Web 服務(wù)調(diào)用出現(xiàn)了問(wèn)題,您一定希望讓客戶端知道這一情況,通常明智的做法是在出現(xiàn)錯(cuò)誤、中止或超時(shí)時(shí),調(diào)用另一個(gè)方法進(jìn)行傳遞。例如,您可以按如下所示更改上面顯示的 OnLookup 方法,并額外添加一個(gè) OnError

34、方法,以顯示所有問(wèn)題: function OnLookup() var stb = document.getElementById(_symbolTextBox); MsdnMagazine.StockQuoteService.GetStockQuote( stb.value, OnLookupComplete, OnError); function OnError(result) alert(Error: + result.get_message();這樣,如果 Web 服務(wù)調(diào)用失敗,您將通過(guò)警報(bào)框通知客戶端。您還可以在從客戶端發(fā)出的對(duì)任何 Web 服務(wù)的調(diào)用中加入 userContext

35、參數(shù),該參數(shù)是作為 Web 方法的最后參數(shù)傳入的任意字符串,它將作為額外的參數(shù)傳播給成功和失敗的方法。在這種情況下,將被請(qǐng)求股票的實(shí)際符號(hào)作為 userContext 進(jìn)行傳遞會(huì)比較有意義,這樣您就可在 OnLookupComplete 方法中顯示它: function OnLookup() var stb = document.getElementById(_symbolTextBox); MsdnMagazine.StockQuoteService.GetStockQuote( stb.value, OnLookupComplete, OnError, stb.value);functio

36、n OnLookupComplete(result, userContext) / userContext contains symbol passed into method var res = document.getElementById(_resultLabel); res.innerHTML = userContext + : + result + ;如果您發(fā)現(xiàn)您要對(duì)某個(gè) Web 服務(wù)進(jìn)行多個(gè)不同的調(diào)用,并且對(duì)于每個(gè)調(diào)用您重復(fù)使用相同的錯(cuò)誤和/或完成方法,那么您還可以設(shè)置全局默認(rèn)的失敗和成功的回調(diào)方法。這就避免了在每次調(diào)用時(shí)都必須指定一對(duì)回調(diào)方法,而且您還可以為各個(gè)方法分別進(jìn)行選擇,

37、使其忽略全局定義。以下是 OnLookup 方法的示例,其中設(shè)置了全局的(而不是對(duì)單個(gè)調(diào)用的)默認(rèn)的成功和失敗的回調(diào)方法。 / Set default callbacks for stock quote serviceMsdnMagazine.StockQuoteService.set_defaultSucceededCallback( OnLookupComplete);MsdnMagazine.StockQuoteService.set_defaultFailedCallback( OnError);function OnLookup() MsdnMagazine.StockQuoteSe

38、rvice.GetStockQuote(stb.value);還有一種可以為您的 Web 服務(wù)方法構(gòu)建完整的 .asmx 文件的有趣方法,就是將 Web 服務(wù)方法直接內(nèi)嵌在頁(yè)類中。如果為您希望調(diào)用的方法構(gòu)建完整的 Web 服務(wù)端點(diǎn)沒(méi)有意義,那么您可以在您的頁(yè)面中公開(kāi)一個(gè)可通過(guò)客戶端 JavaScript 調(diào)用的 Web 方法,做法是向頁(yè)面中添加一個(gè)服務(wù)器端方法(直接在頁(yè)面中添加或者以代碼隱藏的方式添加)并用 WebMethod 屬性對(duì)其進(jìn)行批注。然后您就可以通過(guò)客戶端對(duì)象 PageMethods 調(diào)用它了。示例顯示的是經(jīng)過(guò)重新編寫(xiě)的股票報(bào)價(jià)服務(wù)示例,它完全包含在一個(gè)頁(yè)中,而不是分割到各個(gè) We

39、b 服務(wù)中。請(qǐng)記住,這些客戶端代理只能由 ASP.NET .asmx 端點(diǎn)、Windows Communication Foundation .svc 端點(diǎn)或直接內(nèi)嵌在頁(yè)面中的 WebMethod 生成,而且不是調(diào)用任意 Web 服務(wù)的通用機(jī)制。實(shí)際上,對(duì)于基本的 XmlHTTPRequest 對(duì)象有一般性限制,請(qǐng)求的范圍僅限于加載頁(yè)面的域(出于安全的原因),因此這一做法無(wú)法用于調(diào)用任意 Web 服務(wù),無(wú)論客戶端代理是否支持此操作。如果您發(fā)現(xiàn)需要調(diào)用外部 Web 服務(wù),最好在您調(diào)用外部 Web 服務(wù)的 .NET 代理類(使用 wsdl.exe 或 Visual Studio 中的“添加 Web

40、 引用”生成)的應(yīng)用程序中設(shè)置一個(gè)橋接的 .asmx 端點(diǎn)。工作原理您可以采用標(biāo)準(zhǔn)的 .asmx Web 服務(wù),幾乎不做任何更改即可在瀏覽器中通過(guò)客戶端 JavaScript 對(duì)其進(jìn)行訪問(wèn),乍看起來(lái)有些匪夷所思。秘密就在于注冊(cè)了一個(gè)新的 .asmx HTTP 處理程序,并將其添加到了每個(gè)支持 ASP.NET AJAX 的網(wǎng)站的配置文件中: 如果對(duì)一個(gè) .asmx 端點(diǎn)進(jìn)行標(biāo)準(zhǔn)的 Web 服務(wù)請(qǐng)求,則這個(gè)新注冊(cè)的處理程序?qū)⒄{(diào)用標(biāo)準(zhǔn) Web 服務(wù)處理程序 (System.Web.Services.Protocols.WebServiceHandlerFactory)。但是,如果請(qǐng)求在 URL 中有

41、后綴 /js 或者包含帶有 mn= 變量的查詢字符串(如 ?mn=GetStockQuote),則處理程序會(huì)返回一個(gè) JavaScript 塊,為 Web 服務(wù)創(chuàng)建一個(gè)客戶端代理(帶有 /js 的情況),或者會(huì)調(diào)用 WebService 派生類中定義的相應(yīng)方法,并把響應(yīng)打包在 JavaScript Object Notation (JSON) 編碼的字符串中(帶有 ?mn= 的情況)。 當(dāng)頁(yè)面包含對(duì) .asmx 服務(wù)的客戶端引用(通過(guò) ScriptManager 控件中的 ServiceReference 元素)時(shí),它會(huì)注入使用后綴 /js 引用 .asmx 文件的腳本元素,從而在客戶端創(chuàng)建代

42、理。例如,我在上面構(gòu)建的股票報(bào)價(jià)頁(yè)面會(huì)在其中顯示以下腳本元素: 當(dāng)然,這是在添加了對(duì) Microsoft AJAX Library 的腳本引用的基礎(chǔ)上,AJAX Library 中包含了與此代理進(jìn)行交互所需的客戶端功能。如果您嘗試自己導(dǎo)航至此端點(diǎn),您將看到以下 JavaScript(部分): Type.registerNamespace(MsdnMagazine);MsdnMagazine.StockQuoteService=function() this._timeout = 0; this._userContext = null; this._succeeded = null; this.

43、_failed = null;MsdnMagazine.StockQuoteStotype=GetStockQuote:Sys.Net._WebMethod._createProxyMethod(this, GetStockQuote, MsdnMagazine.StockQuoteService.GetStockQuote, symbol), .此 JavaScript 使用每個(gè)包含 ScriptManager 控件的頁(yè)面中所包含的 Microsoft AJAX Library 的功能(如命名空間和 WebMethod 類)。此 JavaScript 創(chuàng)建的代理方法經(jīng)過(guò)初

44、始化,利用此例中的查詢字符串 ?mn=GetStockQuote 調(diào)用 .asmx 端點(diǎn),因此無(wú)論您何時(shí)從客戶端調(diào)用 MsdnMagazine.StockQuoteService.GetStockQuote,它都會(huì)變成對(duì)同一 .asmx 端點(diǎn)的異步 Web 請(qǐng)求。將客戶端代理生成和服務(wù)器端對(duì) JavaScript 發(fā)出的 Web 服務(wù)調(diào)用的支持相結(jié)合,意味著您可以以一種直觀的方式包含對(duì)您的 .asmx Web 服務(wù)的客戶端調(diào)用。序列化 基于 AJAX 的 Web 服務(wù)的默認(rèn)序列化是 JSON。如果您注意到上一部分所顯示的一系列頁(yè)面操作,會(huì)發(fā)現(xiàn) Web 服務(wù)請(qǐng)求和響應(yīng)的主體部分類似于: Requ

45、est: symbol:ABCResponse: 51這當(dāng)然不是您在調(diào)用 .asmx Web 服務(wù)時(shí)所習(xí)慣看到的標(biāo)準(zhǔn) XML 格式,因?yàn)?.asmx 端點(diǎn)在構(gòu)建時(shí)已序列化到 XML 中,所以 ASP.NET 2.0 AJAX Extensions 所增加一個(gè)主要內(nèi)容便是 JSON 序列化程序。實(shí)際上共有兩個(gè)序列化程序:一個(gè)在 JavaScript 中實(shí)現(xiàn),用于客戶端,一個(gè)在 .NET 中實(shí)現(xiàn),用于服務(wù)器,尤其用在 AJAX 客戶端調(diào)用 .asmx 端點(diǎn)時(shí)。服務(wù)器端序列化程序可通過(guò) Microsoft.Web.Script.Serialization.JavaScriptSerializer 使

46、用,客戶端序列化程序可通過(guò) Sys.Serialization.JavaScriptSerializer 使用。使用 JSON 作為基于 XML 的序列化格式的一個(gè)主要優(yōu)勢(shì)是您只需簡(jiǎn)單地求得 JSON 字符串的值即可對(duì) JavaScript 中的對(duì)象反序列化??蛻舳诵蛄谢绦蝾惖姆葱蛄谢椒ㄗ罱K會(huì)變得非常簡(jiǎn)短(去掉了錯(cuò)誤檢查): Sys.Serialization.JavaScriptSerializer.deserialize= function()eval(+data+);而另一方面,JavaScriptSerializer 的序列化方法卻更復(fù)雜了。使用 JSON 的另一優(yōu)勢(shì)就是它與對(duì)應(yīng)的

47、 XML 相比,其表示形式更加精簡(jiǎn)。與標(biāo)準(zhǔn) Web 服務(wù)使用 XmlSerializer 將類型序列化到 XML 中非常類似,您可以采用幾乎任何 .NET 類型并使用 JavaScriptSerializer 將其序列化到 JSON 中。如果您希望親自嘗試,只需調(diào)用 JavaScriptSerializer 類的 Serialize 方法。顯示了一個(gè)示例控制臺(tái)應(yīng)用程序,此例中,它對(duì)復(fù)雜的 Person 類型進(jìn)行序列化。(該程序必須包含對(duì) Microsoft.Web.Extensions.dll 的程序集引用,該 DLL 隨 ASP.NET AJAX Extensions 安裝在全局程序集緩存

48、(GAC) 中。)控制臺(tái)應(yīng)用程序的輸出將是 JSON 格式的 Person 類,或: Married:true,Age:33,FirstName:Bob,LastName:Smith正像 XmlSerializer 那樣,JavaScriptSerializer 將僅對(duì)一種類型的公共可訪問(wèn)數(shù)據(jù)進(jìn)行序列化,并且不支持對(duì)循環(huán)引用的解析。但任何可由標(biāo)準(zhǔn) .asmx Web 服務(wù)序列化的類型也都能與此序列化程序一起正常工作(當(dāng)然其中包括 DataSet)。鑒于這一點(diǎn),您可以構(gòu)建更復(fù)雜的 Web 服務(wù),因?yàn)樗幚韽?fù)雜類型就像 .asmx 文件中定義的任何基于 SOAP 的 Web 服務(wù)一樣輕松。示例顯示

49、了一個(gè)名為 MarriageService 的 Web 服務(wù),它實(shí)現(xiàn)了 Marry 方法,它采用兩個(gè) Person 對(duì)象(正如前面定義的)并對(duì)其屬性進(jìn)行相應(yīng)的修改。(本期的代碼下載部分包含有此例附帶的 ASP.NET 頁(yè)面。)如果您選擇在您的客戶端腳本中使用 XML,該選項(xiàng)仍然可用。除了在定義 Web 服務(wù)時(shí)使用的標(biāo)準(zhǔn) WebMethod 屬性外,Microsoft.Web.Script.Services 命名空間中還有一個(gè)名為 ScriptMethod 的新屬性,它具有 ResponseFormat 特性,該特性可設(shè)置為 Json 或 Xml(默認(rèn)值為 Json)。 namespace PS

50、 ScriptService WebService(Namespace = /ws) WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1) public class StockQuoteService : WebService WebMethod public int GetStockQuote(string symbol) return (new Random().Next(0, 120); 這樣,序列化的響應(yīng)將為: 74當(dāng)您通過(guò)客戶端 JavaScript 調(diào)用此方法來(lái)處理 XML

51、響應(yīng)時(shí),怎樣選擇由您自己決定。如果您計(jì)劃對(duì)其執(zhí)行轉(zhuǎn)換,或者已經(jīng)在使用 MSXML,那么這會(huì)非常有用。總結(jié)有必要指出的是,ASP.NET 2.0 AJAX Extensions 提供了兩個(gè)預(yù)先構(gòu)建的服務(wù),用于通過(guò)客戶端代碼訪問(wèn)特定 ASP.NET 2.0 應(yīng)用程序服務(wù),它們是:ProfileService 和 AuthenicationService。使用這兩個(gè)客戶端代理類,您可以為單個(gè)客戶端設(shè)置和檢索配置文件值,并完全在客戶端腳本中執(zhí)行身份驗(yàn)證(通過(guò)默認(rèn)的成員資格提供程序)和授予身份驗(yàn)證 cookies。盡管許多有關(guān) ASP.NET 2.0 AJAX Extensions 的討論和演示都偏重于

52、介紹那些使用戶界面具備更高響應(yīng)能力的漂亮控件,但是能夠直接通過(guò)客戶端 JavaScript 調(diào)用 Web 服務(wù)是最吸引人、最實(shí)用的功能之一。憑借完善的 .NET Framework/JSON 序列化程序、與熟悉的 .asmx Web 服務(wù)的直接集成、對(duì)批處理的支持和自動(dòng)生成的與外部 Web 服務(wù)的橋接,如此全面且深入地支持 Web 服務(wù)可能會(huì)使這一功能成為所有功能中最吸引人的功能。附件2:外文原文Extreme ASP.NET1.1Web Deployment ProjectsWhen ASP was first released, Web programming was more diffi

53、cult because you needed IIS to serve your ASP pages. Later, ASP.NET 2.0 and Visual Studio 2005 made everything easier by introducing the Web site model of development. Instead of creating a new project inside Visual Studio, the Web site model lets you point to a directory and start writing pages and code. Furthermore, you can quickly test your site with the built-in ASP.NET Development Server, which hosts ASP.NET in a local process and obviates the need to install IIS to begin developing. The beauty of the Web site model is that you can develop your Web ap

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論