Share via


建立 RIA Services 方案

WCF RIA Services 可讓您建立方案,以解決建立商務應用程式時的各種案例。不管是基本或極為複雜的案例都有。例如,基本案例可能包含單一 Silverlight 應用程式,只能存取中介層的一些網域服務。較複雜的案例可能包含多個 Silverlight 應用程式,全部都連結至公開大量網域服務的一般中介層。本主題將解決建立及管理 RIA Services 方案時所產生的問題,並解決如下所列的問題:

  • 有哪些方法能夠建構 RIA Services 方案?

  • 哪種結構最適合特定案例?

  • 要如何對方案進行疑難排解?

  • 要如何部署方案?

本主題也提供一些對本節所含之逐步解說和其他主題的指引,引導您完成一些關於 RIA Services 典型案例的相關工作。本節包含下列五個逐步解說:

  1. 逐步解說:導覽 RIA Services

  2. 逐步解說:建立 RIA Services 方案

  3. 逐步解說:使用 Silverlight 商務應用程式範本

  4. 逐步解說:建立 RIA Services 類別庫

  5. 逐步解說:當地語系化商務應用程式

本節也包含下列三個主題:

  1. HOW TO:新增或移除 RIA Services 連結:有關管理 RIA Services 連結。

  2. 使用網域服務精靈:記載對話方塊中的 UI 項目。

  3. 偵錯 RIA Services 方案:提供一些在建立 RIA Services 方案出錯時的行動指引。

除了 WCF RIA Services 和 WCF RIA Services 工具組之外,在 RIA Services 文件的本節中呈現的逐步解說還需要正確安裝並設定數個必要程式 (例如 Visual Studio 2010 和 Silverlight 執行階段與 SDK)。要執行逐步解說還需要安裝並設定 SQL Server 2008 R2 Express with Advanced Services,以及安裝 AdventureWorks OLTP 和 LT 資料庫。

WCF RIA Services 的必要條件節點中的主題也提供符合這些必要條件的詳細指示。請按照該處提供的指示進行,以確保您在進行本節的這個 RIA Services 逐步解說時不會發生問題。

RIA Services 連結

在所有 RIA Services 方案中,連結 (也稱為 RIA Services 連結) 存在於 Silverlight 專案及其關聯中介層專案之間。RIA Services 連結是專案對專案參考的特殊形式,可協助從中介層的程式碼產生展示層的程式碼。您可以在建立新的 Silverlight 專案時選取 [啟用 WCF RIA Services] 核取方塊,以建立 RIA Services 連結。您也可以在專案屬性中為現有的專案建立 RIA Services 連結。某些情況下,您會在應用程式之間建立 RIA Services 連結,而其他情況下則在類別庫專案之間建立該連結,如下列各節所示。

當連結存在於專案之間時,Silverlight 專案會接收可讓它存取中介層程式碼的 Proxy 類別。沒有方法可以指定只有中介層的某些部分套用至 Silverlight 專案。下列規則適用於 RIA Services 連結的使用:

  • 連結是定義在 Silverlight 用戶端專案中。

  • 連結總是從 Silverlight 用戶端專案指向 .NET 伺服器專案或類別庫。

  • 每個 Silverlight 用戶端專案只能有一個連結。

  • 連結無法指向其他 Silverlight 用戶端專案。

  • 多個 Silverlight 用戶端專案可以指向同一個伺服器專案或類別庫。

  • Silverlight 應用程式無法直接連結到類別庫專案。

如需管理 RIA Services 連結的詳細資訊,請參閱本節的 HOW TO:新增或移除 RIA Services 連結

預設方案結構

在預設方案結構中,RIA Services 會建立單一用戶端專案和一個 (單一) 伺服器專案。使用 [Silverlight 應用程式] 範本建立新專案並選取 [啟用 WCF RIA Services] 方塊時,會建立具有這個預設結構的方案。然後,兩個專案之間自動就會有 RIA Services 。建置方案時,會產生網域服務的用戶端程式碼,以及共用程式碼。下圖顯示預設方案結構。

預設專案結構

預設方案結構相當方便,因為在建置方案後所有網域服務型別和加入伺服器專案中的共用程式碼都會自動供 Silverlight 用戶端專案使用。而且,在用戶端專案中會顯示加入伺服器專案中的共用程式碼。此結構很適合在伺服器專案中沒有很多網域服務,以及不必跨許多不同 Silverlight 應用程式重複使用商務邏輯的情形。

在具有預設結構的方案中,您可以透過 RIA Services 連結將其他 Silverlight 應用程式加入伺服器專案中。不過,預設結構是有限制的。每個 Silverlight 用戶端之產生的程式碼可以從伺服器專案存取所有中介層程式碼。例如,如果您有三個 Silverlight 應用程式與單一伺服器專案連結,而想要加入一個只由其中一個 Silverlight 應用程式使用的網域服務,則所有三個用戶端應用程式都將會有該網域服務之產生的網域內容,並且能夠存取該網域服務。

如需在 Visual Studio 2010 中建立 RIA Services 方案的詳細資訊,請參閱逐步解說:建立 RIA Services 方案。如需為用戶端專案產生之程式碼的詳細資訊,請參閱產生用戶端程式碼

Silverlight 商務應用程式範本

RIA Services 也提供 [Silverlight 商務應用程式] 範本。此範本為用戶端提供便利的起點,以建置利用 Silverlight 的商務應用程式。此範本會建置在 Silverlight 瀏覽應用程式上,並使用 RIA Services 支援驗證及使用者註冊。當您使用 [Silverlight 商務應用程式] 範本建立專案時,RIA Services 會建立具有預設結構的方案。[Silverlight 商務應用程式] 範本會自動加入下列功能:

  • 登入視窗

  • 註冊視窗

  • Silverlight 瀏覽

商務應用程式的預設驗證模式是表單驗證。若要使用 Windows 驗證,只需在 Web.config 檔案中變更驗證項目的值,例如 <authentication mode="Windows"/>,並在產生的 WebContext 類別上變更 Authentication 屬性的值。商務應用程式範本會自動包含程式碼以支援表單驗證或 Windows 驗證。如需詳細資訊,請參閱逐步解說:使用 Silverlight 商務應用程式範本主題。

伺服器專案的 [Services] 資料夾包含可公開使用者註冊和使用者驗證的網域服務。使用者註冊服務會利用 ASP.NET 成員資格提供者建立新的使用者。伺服器專案的 [Models] 資料夾包含用來定義使用者和註冊資料之屬性的類別。您可以將屬性加入至這些類別來自訂應用程式的使用者資料。

在用戶端專案中,商務應用程式包含可簡化開發展示層的程式碼。[Libs] 資料夾及 [Controls] 資料夾包含範本中使用的組件和控制項。[Login] 資料夾 (位於 [Views] 資料夾) 包含驗證和使用者註冊控制項。在專案中會自動啟用這些控制項。[Resources] 資料夾 (位於 [Assets] 資料夾) 包含專案文字的資源字串。當您將文字加入至應用程式時,可以將資源字串加入至應用程式字串的檔案。

如需詳細資訊,請參閱逐步解說:使用 Silverlight 商務應用程式範本

支援多層式架構類別庫元件

RIA Services 提供 [WCF RIA Services 類別庫] 專案類型,以透過程式庫支援共用程式碼。利用類別庫,您可以將商務邏輯封裝至可重複使用的多層式架構類別庫元件。

下圖顯示使用 RIA Services 類別庫的方案結構。

類別庫結構

請注意,在此圖中 RIA Services 連結不存在於應用程式專案之間,而是存在於類別庫專案之間。您可以在應用程式中使用任何數目的類別庫,而且在任何數目的應用程式中重複使用類別庫。

使用 RIA Services 類別庫可提供下列優點:

  • 單一資料網域的伺服器和用戶端部分可以加以開發,並封裝成單一元件。這個元件可以在多個應用程式中重複使用。

  • 用戶端 Proxy 程式碼產生和原始程式碼共用只發生在一個位置。這個位置是在元件層之間,而不是在每個 Silverlight 應用程式中。

  • 單一 Web 應用程式專案中的多個 Silverlight 應用程式可以只參考所需的類別庫。這樣一來,Silverlight 用戶端就不必查看中介層所公開的所有商務邏輯。

利用 RIA Services 類別庫,您可以建置有彈性的方案結構,只提供應用程式所需的元件。下圖顯示使用多個 RIA Services 類別庫的方案結構。

類別庫結構

Important 注意:
如果將類別庫專案加入至 [Silverlight 商務應用程式] 專案,就無法將驗證服務加入類別庫的伺服器專案。[Silverlight 商務應用程式] 範本中的使用者物件無法存取類別庫。

如需詳細資訊,請參閱逐步解說:建立 RIA Services 類別庫