ASP.NET(1.1) Starter Kit 入門指南

來源:互聯網
上載者:User

http://www.microsoft.com/downloads/details.aspx?FamilyID=7323586a-301c-4a38-a5f3-a4595b391824&displaylang=zh-cn

概述

本工具包中包含以下內容:

適用於 ASP.NET 初學者請先學習相關基本概念知識,

1. ASPNET入門學習資料---ASP.NET和ADO.NET的培訓PPT檔案,包括一些示範代碼,適合初學者入門

2. ASPNET系統學習資料---微軟系統培訓教材,內容包括ASP.NET,ADO.NET,移動開發等,適合對微軟Web開發技術進行比較系統的學習

http://www.microsoft.com/china/msdn/library/webservices/asp.net/starterkits.mspx
利用 ASP.NET Starter Kit 即刻開始 Web 網站開發發布日期: 12/31/2004 | 更新日期: 12/31/2004

Paul Litwin

本文假設您熟悉 Web 開發

下載本文的代碼: StarterKits.exe (141KB)

摘要


果您要構建 ASP.NET Web
網站,則需要在堅固可靠的代碼基礎上來開始構建。從一個完整的網站開始,進行一些修改和自訂,然後上線,是不是很棒?ASP.NET Starter
Kit 就是一種允許您這樣做的打包解決方案。這五個工具包(Community、Reports、Commerce、Portal 和 Time
Tracker)提供可重複使用且可易於自訂的完整代碼。此外,有許多 ISP 支援對 ASP.NET Starter Kit Web
網站進行自動部署,當您必須快速進行部署時,留給您的任務會只有很少的一部分。作者在本文中介紹了 ASP.NET Starter
Kit,並構建了一個具有許多進階功能(如評價、使用者投票、上傳配額、更改通知和主題)的社區 Web 網站。

本頁內容
Commerce Starter Kit 和 Portal Starter Kit
Time Tracker Starter Kit
Reports Starter Kit
Community Starter Kit
建立社區
Community Starter Kit 結構
使用主題
建立新模組
小結

ASP.NET
和 Visual Studio .NET 的確已經使 Web 應用程式開發更為簡單。但是,在建立 ASP.NET Web
網站時,仍需要您親自完成一些工作。您仍需要設計一個完善的應用程式,用可重複使用的可靠代碼開發它,並對其進行徹底測試。在該過程中,您可能會問自己:
“是不是有人早已解決了該問題?我是不是在重複開發?”一些情形對於大多數 ASP.NET
開發人員而言是共同的,如組合社區網站,跟蹤某個項目的時間或者為公司建立門戶。基於一個具有完善設計的基礎來進行構建(而不必從頭設計應用程式,即使這
意味著可以自訂和擴充解決方案),會帶來不錯的結果。這正是 ASP.NET Starter Kit 的設計思想。

ASP.NET Starter Kit 是 Microsoft 提供的一組(共五個)打包應用程式範例,您可從 http://www.asp.net/starterkits
下載。其中包括一個電子商務店面應用程式、一個社區 Web 網站、一個門戶網站、樣本報表和一個項目時間跟蹤應用程式。Starter Kit
的目的在於,提供幾個有用的起始 Web 網站和一些可靠的 ASP.NET 程式碼範例,您可以從中進行學習並在此基礎上構建網站。所有這五個
Starter Kit 都附帶了完整的原始碼,可將 SQL Server? 或 Microsoft? 資料引擎 (MSDE)
用作資料存放區並且可在 Visual Basic?、C# 和 J# 版本中使用。此外,Starter Kit 既可以在 Visual
Studio .NET 版本(帶有獨立的 .aspx 和程式碼後置頁)中使用,也可以在 SDK
版本(沒有程式碼後置頁)中使用。因此,您可以在自己喜歡的環境中使用 Starter Kit,而無論該環境是 Visual Studio
.NET、ASP.NET Web Matrix Project 還是某個其他編輯器。在本文中,我將介紹這五個 ASP.NET Starter
Kit。然後,將重點介紹 Community Starter Kit,以便向您展示如何根據您的具體需要來擴充它。

Commerce Starter Kit 和 Portal Starter Kit

Commerce
Starter Kit 要為虛構的間諜公司 IBuySpy
建立電子商務店面應用程式。該應用程式使用了一個三層體繫結構、緩衝功能、表單身分識別驗證和一個購物車。Commerce Starter Kit
還包括一個 B2B Web 服務組件。這是一個可供您研究和學習的絕佳應用程式,尤其是當您需要構建自己的電子商務應用程式時。

Portal
Starter Kit 為 Commerce Starter Kit 中描述的虛構間諜公司 IBuySpy 建立門戶應用程式。Portal
Starter Kit 包括 10 個門戶模組:通知、連絡人、討論、事件、html/text、映像、連結、快速連結、xml/xsl
和一個自訂模組。

返回頁首

Time Tracker Starter Kit

Time
Tracker Starter Kit(請參閱圖 1)實質上是一個沒有記帳組件的時間和記帳 Intranet
應用程式。它相當簡單。它有三個選項卡:Log、Reports 和 Administration。Administration
選項卡可用來設定項目,Log 選項卡可用來記錄小時數,Reports 選項卡可用來按項目或個人產生報表。

圖 1 Time Tracker Starter Kit 中的 Log 選項卡

Time Tracker Starter Kit 顯示了許多有趣的 ASP.NET 體繫結構方面的功能,如三層設計、Windows? 和表單身分識別驗證、使用 GDI+ 產生動態圖表以及移動前端。

返回頁首

Reports Starter Kit

Reports
Starter Kit 與其他 Starter Kit
的區別在於,它不是一個單一的彙總應用程式。更正確地講,它是一系列(共八個)報表,您可以讀取這些報表,針對樣本資料運行它們並檢查其原始碼。此外,您
可以複製這些原始碼並將它們粘貼到自己的應用程式中。該工具包的工作方式類似於隨 Microsoft .NET Framework SDK 和
Visual Studio .NET 提供的 ASP.NET
QuickStart。這些報表示例包括簡單的表格報表、兩種樣式的分層深入報表、交叉表和幾個 GDI+ 圖表。

返回頁首

Community Starter Kit

Community
Starter Kit
可能會是核心工具包。使用它,無需花費太多精力或者無需知道它的工作原理,就可為使用者組、俱樂部、家庭或社區快速組合社區網站。還可以使用它來組合簡單的
新聞和資訊網站。在某些方面,它與 Portal Starter Kit 提供的功能相重疊,但是它更側重於非商業組織並且更易於設定和管理。

Community
Starter Kit
支援許多不同類型的內容,包括文章、照片庫和事件列表。此外,它還支援大量可選功能(這些功能在許多社區網站上為標準功能),其中包括廣告、仲裁、上傳配
額、評價、評論、使用者投票、內容更改通知、自動轉換、主題、Web 箱、聯合、新聞稿、外觀和安全性。

廣告由兩個 AdRotator
控制項來處理,一個控制項具有標準大小(468×60 像素)的橫幅,另一個具有 125×125
像素的橫幅。如果您針對某個地區啟用仲裁功能,那麼,這一地區的內容必須得到審閱人的許可才能顯示在該網站上。您可以為每個使用者都設定上傳配額,以便限制
可上傳到網站上的映像和檔案的數量。Community Starter Kit 還支援整個社區的上傳配額。這允許 ISP
在單一箱子中宿主許多社區,而不會讓一個網站佔用可用的所有磁碟空間。

您可以選擇針對特定類型的內容(書或文章)開啟使用者評價和評論功能。使用者可以對內容項進行評價(評級可以從 1 到 5),如果願意的話,他們也可以輸入評論來代替評級,或者既添加評級又添加評論。

Community
Starter Kit 支援對使用者投票進行建立和報告。因此,您可以用諸如“您喜歡哪種面向 .NET
的開發語言?”或者“齊柏林飛船合唱團最初的鼓手叫什嗎?”之類的問題來對使用者進行民意測驗。還可以在某個地區中有新內容時自動通知使用者。甚至可以指定轉
換功能,以便將汙穢語言自動從提交內容和評論中清除,而無需您進行任何幹預。

Community Starter Kit 有一個選項允許您建立主題列表,以便要求使用者在添加投稿內容時對該內容進行分類。因此,基於 .NET Framework 的新聞網站的主題可以是 ASP.NET、託管 C++、Web 服務等。

Community Starter Kit 允許您通過啟用各種 Web 箱來在頁面空白處添加需要反白的內容。例如,您可以使用 Web 箱在首頁上顯示最流行或最新的文章、連結、下載或照片。還可以使用引用 Web 箱來在頁面上顯示隨機引用。

Community
Starter Kit 支援通過兩種機制來複製內容:服務訂閱和 Web 服務箱。使用服務訂閱機制,可以彙總另一個 Community
Starter Kit
網站地區的內容並將其顯示在您的網站上。例如,您可以訂閱另一個社區網站的討論地區,並將其顯示在自己的網站上,就好像它們是您自己的討論地區一樣。與
Web 箱一樣,Web 服務箱在頁面空白處顯示摘錄資訊;但是,Web 服務箱可以從其他網站獲得其內容。您可以訂閱另一個將其內容作為 XML
Web 服務來發布的 Community Starter Kit 網站,也可以訂閱 RSS 服務,如 http://msdn.microsoft.com/msdnmag/rss/recent.xml。您可以利用 XML Web 服務和 SOAP 協議(而不是目前的 RSS 協議),將網站的任何地區作為社區服務來發布。所發布的地區可以用作服務訂閱或 Web 服務箱。


可以向社區成員發送新聞稿。新聞稿組件既支援模板,也支援嵌入特殊標記,您可以使用這些標記來包括諸如 Username、FullName 和
Password 之類的欄位,以及諸如 NewArticles、NewBooks 和 NewDownloads 之類的內容特定的欄位。

Community Starter Kit 引擎支援外觀或主題等概念,並允許您通過從管理頁上選擇另一個主題來完全改變網站的外觀。外觀和主題將在本文稍後討論。

Community Starter Kit 支援廣泛的安全系統,這些系統將成員按照其角色進行分類:匿名、已身分識別驗證、審閱人和管理員,也可以按照您自訂的角色來進行分類。您還可以保護網站任何地區的安全,以便只有特定類型的使用者可以查看、添加、編輯或刪除內容。

圖 2 社區Web 網站樣本


2 舉例說明了 Community Starter Kit 支援的許多社區功能。該社區是一個名為 Ballard .NET
的虛構使用者組,它使用 Professional 主題。請注意,使用者投票顯示在頁面的頂部,社區服務供給箱標題“.NET Tips &
Tricks”位於頁面的右下角。

返回頁首

建立社區


下載和安裝 Community Starter Kit
之後,您希望做的第一件事情會是刪除樣本網站資料。這可以通過單擊導航條底部的“Login”連結並以 Admin 使用者身份用 Admin
密碼登入來完成。(由於該密碼會造成安全風險,因此請儘快更改該密碼。)在成功登入之後,新連結 (Admin)
將出現在導航條上。單擊該連結跳轉到網站的管理部分,向下滾動,尋找“Delete Content”連結。

當刪除內容之後返回到社區首頁
時,您會注意到一些樣本內容仍保留著。要將首頁內容替換為自己的內容,需要返回到管理頁,單擊“Edit
Sections”,單擊“Home”地區,並提供一個網站標題、說明和徽標。還可以使用這個“Edit
Sections”選項來更改首頁的基本布局、選擇主題或者啟用首頁的許多可選功能(如顯示 Web 箱或 Web 服務箱)。

在設定了首頁的布局以後,可以向網站中添加多個地區。一個網站可以有無限多個地區。圖 3 列出了可建立的各種類型的地區(或模組)。


添加一個地區,請從管理頁單擊“Edit Sections”連結。您可以建立多個類型相同的地區。例如,圖 2
中顯示的社區網站包括兩個文章地區:News 和
Articles。可以使用父地區來協助組織一組類似的地區。例如,如果您希望按一般分類來分離下載內容,則可以建立一個包含幾個下載地區(如
User Contributions、Controls 和 Speaker Presentations)的父地區。

從“Edit Sections”頁,可以啟用適用於特定地區的各種可選功能,如仲裁或電子郵件通知。還可以選擇將該地區的內容作為社區 Web 服務來發布。

返回頁首

Community Starter Kit 結構


管許多 Web
網站都是受資料驅動且動態產生的,但是其中大多數在很大程度上仍是靜態。儘管這不一定是壞事,但是網站上動態產生的內容越多,它的自訂程度越高。
Community Starter Kit 完全是資料驅動的。如果不計算用於網站管理的頁面,Community Starter Kit
僅包含一個沒有內容的 .aspx 頁。所有內容都儲存在 SQL Server 或 MSDE 資料庫中。Community Starter
Kit 的單個安裝支援多個可使用特殊 ISPAdmin 帳戶配置的社區。

當向 Web 服務器請求 Community
Starter Kit 頁面時,一個名為 CommunitiesModule 的 HTTPModule
會處理該請求,確定與該請求相關聯的社區、地區、頁面和使用者,並分別填充 CommunityInfo、SectionInfo、PageInfo 和
UserInfo 對象。這些對象是 Context 對象的 Items 集合中的成員。因為 Context
對象可以在參與一個請求的所有模組和處理常式中儲存,所以,這些資料將對於處理該請求的頁面可用(有關 Context 對象的更多詳細資料,請參閱
Steven Smith 撰寫的“ASP.NET:Nine Options for Managing Persistent User State in Your ASP.NET Application”,該文刊登在 2003 年 4 月號的 MSDN? Magazine 中)。然後 CommunitiesModule 將該請求重新導向到 communityDefault.aspx 頁,該頁負責使用上述對象、許多使用者控制項、支援類和樣式表動態產生響應。


成的 Community Starter Kit
可能無法完成您希望的一切,但是該工具包在設計時考慮了擴充性。如果您不喜歡它的工作方式,則可以輕鬆地更改它。畢竟,它附帶有以 Visual
Basic .NET、C# 和 J# 編寫的完整原始碼。該工具包的主題和模組元素特別適合進行自訂。

返回頁首

使用主題

Community
Starter Kit 是基於 ASP.NET Forums 應用程式設計的,與 Forums
應用程式一樣,它也使用主題(又稱作外觀)來將使用者介面與代碼分開。主題遠不只是樣式表。實際上,沒有主題,就會沒有內容,這是由於主題包含所有顯示在站
點上的控制項。主題由圖 4 中列出的元素組成。

要建立主題,需要在 Communities\Common\Themes 檔案夾下面添加一個檔案夾。主題的名稱派生自該檔案夾的名稱。在該檔案夾下面,建立圖 4中顯示的檔案夾。幸運的是,由於所有的主題都從基本主題 Default 繼承,所以您不必填充主題的所有檔案夾。因此,如果您不提供主題所需的外觀,Community Starter Kit 會使用 Default 主題的外觀。


管 Default 主題包含 75 個以上的檔案,您仍可以通過只提供幾個檔案來建立基本主題。我建立了一個名為 Small 的基本主題,它是
Default 主題的精簡版本。它與 Default
主題的基本區別在於,其採用更小的字型,顏色由藍色改為紅色,預設頁部分採用不同的布局。我的新主題由下列六個檔案組成:

Communities\Common\Themes\Small\Images\ redshiny3dsquarebullet_7x7.jpg

Communities\Common\Themes\Small\Skins\ControlSkins\ Sections_SectionMenu.ascx

Communities\Common\Themes\Small\Skins\PageSkins\Default.ascx

Communities\Common\Themes\Small\Styles\an_red_arrow.gif

Communities\Common\Themes\Small\Styles\Default.css

Communities\Common\Themes\Small\Styles\redyellowstar.gif

當然,提供的元素越多,主題將越完整。例如,如果您深入到使用 Small 主題的某個地區,仍將看到具有藍色背景的控制項。但是,如果我沒有更改過該主題的色彩配置,這就是最明智的做法了。要建立一個主題,最簡單的方法就是以現有的主題作為模型,然後修改其外觀和樣式。

返回頁首

建立新模組

儘管這比建立主題有點複雜,但是您還可以為社區建立新模組。例如,我建立了一個名為 Jobs 的模組,用它來跟蹤工作公告。

要建立模組,首先向 CommunityStarterKit 資料庫中添加一個用來跟蹤新模組項的新表,並將該表命名為 Community_module(其中,module 是新模組的名稱)。該表的主鍵應當命名為 module_ContentPageID,連同要針對該模組收集的其他欄位的名稱。


將需要可用於添加新模組項的預存程序,編輯現有項目,檢索項目列表,然後檢索單個項目的所有欄位。將 Jobs 模組的預存程序命名為
Community_JobsAddJob、Community_JobsEditJob、Community_JobsGetJobs 和
Community_JobsGetJob。我複製了 Articles 模組的預存程序,將它們用作 Jobs
預存程序的模型,並添加跟蹤工作公告所必需的其他欄位。Community_JobsGetJobs 用於檢索 Jobs_Section
頁中的工作列表。該模組調用 Community_GetPagedSortedContent 函數以對輸出內容進行分頁(請參閱圖 5)。


Engine\Modules 下建立一個將包含該模組代碼的新檔案夾。在該檔案夾下,應當有三個名為 Components、Content 和
Controls 的子檔案夾。對於 Jobs 模組,我建立了
Engine\Modules\Jobs\Components、Engine\Modules\Jobs\Content 和
Engine\Modules\Jobs\Controls folders。Components 檔案夾應當包含兩個類庫,第一個類庫包含從
ContentInfo 類派生的類,第二個類庫包含負責調用每個模組的預存程序的工具 + 生產力類。

使用 Visual Basic
.NET 版本的 Community Starter Kit,我建立了一個名為 JobInfo.vb 的類庫,其中包含一個單一類
(JobInfo)。我將 ArticleInfo.vb 類庫用作我的類庫的模型。JobInfo 建構函式使用單一參數
DataReader,通過該參數從 Jobs 表抽取每個欄位,並將它們放入隨後將作為 JobInfo 類的一系列屬性公開的私人變數中(請參閱圖 6 中的代碼)。

JobUtility
類提供 Jobs 模組和 Jobs 預存程序之間的介面,其中包含單一類
JobUtility,該類有四種方法:AddJob、EditJob、GetJobs 和 GetJobInfo。GetJobs 方法負責調用
Community_JobsGetJobs 預存程序並返回 JobInfo 對象的 ArrayList(請參閱圖 7)。


於該模組支援的每個基本類型的頁面,Content
檔案夾都應當包含一個類庫。這些類將成為以後建立的使用者控制項的代碼。至少,您的模組需要為下面每種類型的頁面提供類:添加項目、編輯項目、顯示項目列表
(對於地區頁)和顯示單個項目(對於項目深化頁)。這些類需要分別從
ContentAddPage、ContentEditPage、ContentListPage 或 ContentItemPage
派生。正如您可能已經注意到的那樣,Content 往往與它們所調用的預存程序具有一對一對應關係。

我建立了四個類庫
(AddJob.vb、EditJob.vb、JobSection.vb 和 Job.vb),每個類庫都以 Articles
內容類別庫為模型。內容類別用來黏附 JobInfo 類和使用者控制項外觀。Job.vb 類庫中的 Job 類負責顯示特定工作列表的完整資訊(請參見圖 8)。


於顯示在 Job 和 JobSection 頁上的每個工作項目,Controls 檔案夾將包含自訂的伺服器控制項。我為 Job
頁建立了下列伺服器控制項:JobCompany、JobTempStatus、JobTempMonths、JobStartDate、
JobLocation、JobEducation、JobExperience、JobSalary、JobContactName、
JobContactPhone、JobContactEmail、JobContactWeb 和 JobEditContent。對於
JobSection 頁,我建立了 ItemJobLocation 控制項。JobCompany 自訂控制項顯示在圖 9 中。

現在,您需要建立一些使用者控制項,來表示與在上一步中建立的 SkinnedCommunityControl 類相對應的每個基本模組頁的內容外觀。至少,您必須為 Default 主題提供一組內容外觀使用者控制項。還可以為其他主題提供內容外觀使用者控制項。


在 Themes\Default\Skins\ContentSkins
檔案夾下建立了三個使用者控制項:Jobs_AddJob.ascx、Jobs_JobSection.ascx 和
Jobs_Job.ascx。沒有用來編輯工作的使用者控制項,這是因為 Jobs_AddJob.ascx
控制項執行雙重任務,它為添加工作和編輯工作均提供支援。圖 10 中顯示了 Jobs_Job.ascx 使用者控制項的摘錄。請注意對 Engine\Modules\Jobs\Controls 檔案夾中名為 JobCompany 和 JobTempStatus 的自訂伺服器控制項的引用。

此時,我向新內容控制項的預設樣式表 (Themes\theme\ Styles\default.css) 添加了樣式。圖 11 顯示了其中的幾個新樣式。


後,我向資料庫中的 Community_PageTypes 和 Community_NamedPages
表添加了用於該項目以及項目地區頁的條目。藉助於模仿現有 Community_MaintenanceInitializeArticles
預存程序建立的名為 Community_ MaintenanceInitializeJobs
的預存程序,該步驟要相對簡單。運行該預存程序會建立必要的表格條目。

圖 12 JobSection 頁面

圖 12 顯示了 Ballard .NET 社區網站的 JobSection 頁。如果您單擊工作公告下面的“Read More”連結,將顯示 13 所示的 Job 頁。

圖 13 Job 頁

從本文開頭的連結地址下載構成 Jobs 模組(以及 Small 主題)的檔案副本。

返回頁首

小結

ASP.NET
Starter Kit 提供幾個預封裝的應用程式範例,這些應用程式既提供可正常工作的 Web 網站模板,又提供用 Visual Basic
.NET、C# 和 J# 編寫的易用的範例程式碼。這些工具包代表最常見的 Web
應用程式,包括社區、商務、門戶、報表和項目時間跟蹤網站。本文討論了 Starter Kit 的安裝和使用,以及通過代碼(即使您沒有
Visual Studio .NET 副本)自訂和擴充 Community Starter Kit 的方法。如果您在尋求一種即刻開始建立
ASP.NET 網站的方法,這些工具包可能是您要尋找的一組便捷工具。還需注意的是,個別的提供 虛擬主機的公司可提供對 Starter
Kit 的自動部署以及帳戶註冊。有關詳細資料,請參閱 http://www.asp.net/hosters。

感謝 Stephen Walther 協助我撰寫本文。

有關背景資訊,請參閱:
ASP.NET Starter Kits
http://msdn.microsoft.com/aspnet

Paul Litwin 是 Deep Training 的 CEO 兼進階培訓師,該公司主要從事 .NET 培訓。他是 Microsoft ASP.NET Connections 的會議主席,他親自撰寫或與人合著有多本書籍,其中包括 ASP.NET for Developers (SAMS, 2001)。他目前正在撰寫一本有關 ASP.NET 的新書。您可以通過 paull@deeptraining.com 與 Paul 聯絡。

轉到原英文頁面

適用於已經瞭解ASP.NET 的人員可以從本工具包中的程式碼範例檔案夾開始:

1.
英文版循序漸進教材---英文版本的原始碼樣本,針對使用最廣泛的Web應用,微軟根據最佳實務方式,精心設計了5個情境,分別是電子商務
(Commerce)、門戶網站(Portal)、Web報表系統(Reports)、社區系統(Community)、時間管理(Time
Tracker)。這些程式碼範例既可以作為學習的典範,也可以在此基礎上開始一個新的項目

2. 中文版本---Starter Kit的中文版本,中文版主要是針對Starter
Kit中的文檔作了一定的翻譯,使用的時候,請先按照工具包中的指導安裝英文版,然後解壓相應的中文版壓縮檔,找到英文版的安裝路徑,覆蓋英文版的文
件。注意該中文版需要Visual Studio .NET 2003版本。

3. 由於Starter Kit提供了多種語言的VS版本和SDK版本(VS版本表明可以在開發環境開啟VS的項目,SDK版本表明安裝了.NET Framework,不需要安裝VS.NET就可以工作),本次翻譯的部分為C#語言的VS版本。

4. 助學貸款管理系統---微軟公司為國內某銀行所寫的樣本程式,該代碼展示了ASP.NET的功能特性在國內關鍵系統上的應用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.