LightSwitch 作为数据源
除了使用 LightSwitch 创建应用程序外,您还可以将其用作中间层来向其他应用程序提供数据。当您从 LightSwitch 将应用程序发布到 Web 服务器或 Windows Azure 时,将该数据作为开放数据协议 (OData) 服务公开。OData 提供在 Web 上与数据服务进行通信的标准。许多业务当前使用 OData 到系统和合作伙伴之间交换数据,并提供访问以外到的数据存储区。由于 OData 是标准协议,因此在几乎所有平台或设备上的其他客户端应用程序都可以访问通过 LightSwitch 创建或公开的数据。
创建 OData 服务
OData 服务为应用程序中的每个数据源自动创建,每个数据源一个单独的终结点。此功能不仅适用于内部数据库中定义,而且适用于任何附加的数据源,例如 SQL Server 数据库、SharePoint 列表,甚至其他 OData 服务。
您为实体定义的任何业务逻辑和用户权限将在访问终结点时执行,无论哪个客户端在访问服务。而不是编写业务逻辑和定义每个客户端应用程序的用户权限,可以使用 LightSwitch 中间层为集中代码的地点。
访问 LightSwitch OData 服务
在您部署三层配置(在 Internet Information Services 或 Windows Azure 中承载中间层)中部署 LightSwitch 应用程序时,将公开该服务终结点。服务的名称对应于数据源的名称。例如,演练:创建 Vision Clinic 应用程序 中的示例应用程序将公开两个服务终结点,因为它具有两个数据源:ApplicationData 数据库和 PrescriptionContoso SQL 数据库,前者在内部,后者则是附加的。如果应用程序部署到命名为“www.contoso.com”的网站,那么服务终结点将是 https://www.contoso.com/ApplicationData.svc 和 https://www.contoso.com/PrescriptionContoso.svc。
在每个服务中,可以导航到在数据设计器中建模的所有实体集。OData 定义可以使用一组 URI 约定对数据执行的一组查询操作。您可以查询 HTTP-GET 请求的服务,并且返回响应中结果的源。例如,您可以通过 URI https://www.contoso.com/PrescriptionContoso.svc/Products 查询 Vision Clinic 的 PrescriptionContoso 服务,以返回包含 Products 实体中所有记录的结果集。
说明 |
---|
若要在 Internet Explorer 中查看原始源数据,必须禁用“打开源读取视图”复选框。 |
OData 查询区分大小写;如果指定 products 而不是 Products,查询不会返回结果。您可以进一步以多种方式优化您的 OData 查询。例如,您可以使用 https://www.contoso.com/PrescriptionContoso.svc/Products(1) 查询只返回具有 1 的 ProductID 的产品。若要返回“镜片护理”类别中的所有产品,可以使用 https://www.contoso.com/PrescriptionContoso.svc/Products?Category='Lens Care 查询。您在 LightSwitch 中定义的任何业务规则或权限仍适用。因此,用户想运行先前的查询需要查看产品的权限。
同样,OData 协议通过导航属性定义导航关系的标准方法。例如,您可以使用 https://www.contoso.com/PrescriptionContoso.svc/Products(1)/ProductRebates 查询在相关的 ProductRebates 表中为具有 1 的 ProductID 的产品查找退税。OData 支持许多其他查询操作,如 OrderBy、Top、Skip 和 Sort。有关更多信息,请参见 OData: URI Conventions。
确保 LightSwitch OData 服务的安全
在大多数情况下,您将希望控制可以访问和更新 OData 服务中的数据的人员。可以通过使用 LightSwitch 应用程序的设置控制其访问权限。LightSwitch 支持三种身份验证设置:无、窗体和窗口。
如果选择 Forms 身份验证,LightSwitch 将启动两个身份验证模式。一种模式是登录对话框所使用的和使用 Web 服务的自定义 API 来传递凭据和获取表格验证 cookie 的自定义协议。如果对数据的请求不具有有效 forms 身份验证 cookie,则 LightSwitch 将返回 HTTP Basic 挑战作为响应。此响应允许未开发 LightSwitch 通过凭据在标准 HTTP 协议的客户端。如果选择 Windows 身份验证,那么 LightSwitch 需要一个经过身份验证的 Windows 用户提供凭据。有关更多信息,请参见LightSwitch 身份验证和授权。
无论您使用的是何种身份验证机制,您都应考虑通过 HTTPS 使用传输级安全,以便获取凭据、标记和数据。没有 HTTPS 窗体、基本凭据和 Forms 身份验证标记作为纯文本传输。Windows 身份验证更加安全,但是没有 HTTPS,在客户端和服务器之间传递的任何数据将始终为纯文本。若要缓解这一问题,LightSwitch 需具有导致应用程序需要安全连接的“发布向导”中的 HTTPS 设置。启用此设置,将请求从 HTTP 重新定向到 HTTPS,但始终必须在您的网站上获得并配置 HTTPS 证书。有关更多信息,请参见LightSwitch 的安全注意事项。
除了安全访问应用程序外,您还可以在 LightSwitch 中使用基于角色的安全性来限制对特定实体的访问。例如,您可能允许所有经过身份验证的用户显示订单数据,但只有主管才可显示工资表数据。有关更多信息,请参见LightSwitch 身份验证和授权。
LightSwitch 不提供从 OData 终结点隐藏或排除实体集或实体属性的直接机制。无论是否连接到数据层,都将在您服务的终结点上可见。可以通过使用您的数据书屋代码中的内置访问方法来控制对这些资源的访问。有关更多信息,请参见使用代码执行与数据相关的任务。
下面的示例演示代码可防止用户更新或删除产品实体中的数据:
Namespace LightSwitchApplication
Public Class PrescriptionContosoService
Private Sub Product_CanUpdate(ByRef result As Boolean)
result = False
End Sub
Private Sub Product_CanDelete(ByRef result As Boolean)
result = False
End Sub
Private Sub Product_CanInsert(ByRef result As Boolean)
result = False
End Sub
End Class
End Namespace
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 Sub Customers_Filter(ByRef filter As Expression(Of Func(Of Customer, Boolean)))
filter = Function(e) e.TerritoryId = 5
End Sub
private void Customers_Filter(ref Expression<Func<Customer, bool>> filter)
{
filter = e => e.TerritoryId == 5;
}
使用 LightSwitch OData 服务
在任何平台上支持 OData 的所有应用程序都使用来自 LightSwitch 的 OData。连接的方法添加到 OData 源由应用程序更改,但是,您通常只提供 LightSwitch 服务终结点。
LightSwitch 文档包含使用 OData 应用程序的几个示例。
有关如何从另一 LightSwitch 应用程序使用 OData 的信息,请参见 演练:在 LightSwitch 中公开和使用 OData 服务。
有关如何使用从 Windows 应用商店 app 的 OData 的信息,请参见 演练:在 Windows 应用商店应用程序中使用 LightSwitch 数据。
有关如何从 Microsoft Excel 使用 OData 的信息,请参见 演练:通过 PowerPivot 在 Excel 中使用 LightSwitch 服务。
请参见
任务
演练:在 LightSwitch 中公开和使用 OData 服务
演练:在 Windows 应用商店应用程序中使用 LightSwitch 数据
演练:通过 PowerPivot 在 Excel 中使用 LightSwitch 服务