將 LightSwitch 當做資料來源

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

除了使用 LightSwitch 建立應用程式之外,您還可以將它當做中介層提供資料給其他應用程式。 將應用程式資料從 LightSwitch 發行到 Web 伺服器或 Microsoft Azure 時,該資料會顯示為開放式資料通訊協定 (OData) 服務。 OData 提供透過網路與資料服務進行通訊的標準。 現今許多企業除了提供其資料儲存區的存取權之外,還使用 OData 在系統與合作夥伴之間交換資料。 由於 OData 是標準通訊協定,因此幾乎任何平台或裝置上的其他用戶端應用程式都可以存取您透過 LightSwitch 建立或公開的資料。

系統會為您應用程式中的每一個資料來源自動建立 OData 服務,每一個資料來源都有一個獨立的端點。 這項功能不僅適用於您在內建資料庫中所定義的資料表,也適用於任何附加的資料來源,如 SQL Server 資料庫、SharePoint 清單,甚至是另一個 OData 服務。

LightSwitch 會公開多個 OData 端點

您為實體所定義的所有商務邏輯和使用者權限都會在存取端點時執行,無論是哪一個用戶端在存取服務皆然。 您可以使用 LightSwitch 中間層做為集中化程式碼的位置,而不是為每一個用戶端應用程式撰寫商務邏輯和定義使用者權限。

當您在三層組態中部署 LightSwitch 應用程式時 (在 Internet Information Services or Azure 中裝載中間層時) ,會公開服務端點。 服務的名稱對應至您資料來源的名稱。 例如,逐步解說:建立 Vision Clinic 應用程式 中的範例應用程式公開兩個服務端點,因為它具有兩個資料來源:ApplicationData 資料庫 (此為內建資料庫) 以及 PrescriptionContoso SQL 資料庫 (此為附加資料庫)。 如果應用程式部署到名為 “www.contoso.com” 的網站,則服務端點將會是 http://www.contoso.com/ApplicationData.svchttp://www.contoso.com/PrescriptionContoso.svc

在每一個服務內,您都可以巡覽到資料設計工具中建立模型的所有實體集。 OData 會定義一組查詢作業,使用一組 URI 慣例即可在資料上執行此作業。 您可以使用 HTTP-GET 要求來查詢服務,該服務將在回應中傳回含有結果的摘要。 例如,您可以使用 URI http://www.contoso.com/PrescriptionContoso.svc/Products 來查詢 Vision Clinic 的 PrescriptionContoso 服務,以傳回包含 [Products] 實體中所有記錄的結果集。

System_CAPS_ICON_note.jpg 注意

如果要在 Internet Explorer 中檢視未經處理的摘要資料,必須停用 [開啟摘要讀取檢視] 核取方塊。

OData 查詢區分大小寫;如果您指定 products 而非 Products,查詢將不會傳回任何結果。 您可以用數種方式進一步精簡 OData 查詢。 例如,您可以使用 http://www.contoso.com/PrescriptionContoso.svc/Products(1) 查詢,僅傳回其 ProductID 為 1 的產品。 如果要傳回 Lens Care 分類中的所有產品,可以使用 http://www.contoso.com/PrescriptionContoso.svc/Products?Category='Lens Care’ 查詢。 您在 LightSwitch 中所定義的所有商務規則或權限仍然適用。 因此,想要執行先前查詢的使用者需要權限才能檢視 Products。

同樣地,OData 通訊協定會透過巡覽屬性定義巡覽關係的標準方式。 例如,您可以使用 http://www.contoso.com/PrescriptionContoso/Products(1)/ProductRebates 查詢,即可尋找相關的 [ProductRebates] 資料表中 ProductID 為 1 之產品的回饋金。 OData 支援許多其他的查詢作業,例如 OrderByTopSkipSort

在大部分的情況下,您會想要控制誰可以存取和更新 OData 服務中的資料。 您可以使用 LightSwitch 應用程式的設定來控制其存取權。 LightSwitch 支援三個驗證設定:無、表單和 Windows。

如果您選擇表單驗證,LightSwitch 會啟用兩種驗證模式。 一種模式是 [登入] 對話方塊使用的自訂通訊協定,其使用自訂 API 讓 Web 服務傳遞認證及取得表單驗證 Cookie。 如果資料的要求沒有有效的表單驗證 Cookie,LightSwitch 會以 HTTP Basic 挑戰回應。 這個回應可讓不在 LightSwitch 中開發的用戶端透過標準 HTTP 通訊協定傳遞認證。 如果您選擇 Windows 驗證,LightSwitch 會要求經過驗證的 Windows 使用者提供認證。 如需詳細資訊,請參閱如何:在 Silverlight 用戶端應用程式中啟用驗證

無論您使用哪一種驗證機制,都應考慮使用透過 HTTPS 的傳輸層安全性來保護認證、語彙基元和資料的安全。 如果沒有 HTTPS,表單、基本認證和表單驗證語彙基元都會以純文字傳輸。 Windows 驗證較為安全,但是如果沒有 HTTPS,在用戶端與伺服器之間傳遞的任何資料仍然會是純文字。 為緩和這種狀況,LightSwitch 在 [發行精靈] 中有一項 HTTPS 設定,可以讓應用程式要求安全連接。 啟用此設定時,要求將會從 HTTP 重新導向至 HTTPS,但是您仍然必須在您的網站上取得和設定 HTTPS 憑證。 如需詳細資訊,請參閱LightSwitch 的安全性考量

除了保護應用程式的存取權之外,您也可以使用 LightSwitch 中以角色為基礎的安全性來限制對特定實體的存取權。 例如,您可以允許所有經過驗證的使用者顯示訂單資料,但是只有主管人員可以顯示薪資資料。 如需詳細資訊,請參閱如何:在 Silverlight 用戶端應用程式中啟用驗證

LightSwitch 不提供從 OData 端點隱藏或排除實體集或實體屬性的直接機制。 在您服務的端點上將可看到您在資料層上連接到的任何內容。 您可以在資料服務程式碼中使用內建存取控制方法,即可控制對那些資源的存取權。 如需詳細資訊,請參閱使用程式碼執行與資料相關的工作

下列範例顯示的程式碼會防止使用者在 [Products] 實體中更新或刪除資料:

namespace LightSwitchApplication  
{  
   public partial class PrescriptionContosoService  
   {  
      partial void Product_CanUpdate(ref bool result)  
      {  
         result = false;  
      }  
      partial void Product_CanDelete(ref bool result)  
      {  
         result = false;  
      }  
      partial void Product_CanInsert(ref bool result)  
      {  
         result = false;  
      }  
   }  
}  

LightSwitch 另提供使用 EntitySet_Filter 方法的資料列層級篩選。 利用此方法,您可以從實體傳回較小的一組記錄。 下列範例將僅傳回 TerritoryID 為 5 的 [客戶] 記錄:

private void Customers_Filter(ref Expression<Func<Customer, bool>> filter)  
{  
filter = e => e.TerritoryId == 5;  
}  
  

在任何平台上支援 OData 的任何應用程式都可從 LightSwitch 使用 OData 摘要。 連接到 OData 摘要的方法隨應用程式而異,但是您通常僅提供 LightSwitch 服務端點。

LightSwitch 文件包含使用 OData 之應用程式的數個範例。

公開 LightSwitch 應用程式資料
如何:在 Silverlight 用戶端應用程式中啟用驗證
LightSwitch 的安全性考量
使用程式碼執行與資料相關的工作
逐步解說:公開及使用 LightSwitch 中的 OData 服務
逐步解說:在 Windows 市集應用程式中使用 LightSwitch 資料
逐步解說:利用 PowerPivot 在 Excel 中使用 LightSwitch 服務

顯示: