LightSwitch как источник данных

LightSwitch может использоваться не только для создания приложения, но и как промежуточный уровень для предоставления данных другим приложениям. Если публиковать данные приложения из LightSwitch на веб-сервере или в Microsoft Azure, эти данные предоставляются как служба Open Data Protocol (OData). OData предоставляет стандарт для взаимодействия со службами данных в Интернете. Во многих предприятиях сегодня используют OData для обмена данными между системами и партнерами, а также для доступа в хранилища данных. Поскольку OData является стандартным протоколом, другие клиентские приложения практически на любой платформе или устройстве могут получить доступ к данным, которые были созданы или предоставлены через LightSwitch.

Создание службы OData

Служба OData создается автоматически для каждого источника данных в приложении с отдельной конечной точкой для каждого источника данных. Эта возможность применяется не только к таблицам, которые были определены во встроенной базе данных, но и к любому присоединенному источнику данных, например к базе данных SQL Server, списку SharePoint или даже другой службе OData.

LightSwitch предоставляет доступ к нескольким конечным точкам OData

Вся бизнес-логика и пользовательские разрешения, определенные для сущностей, будут выполняться при обращении к конечной точке, независимо от того, какой клиент обращается к службе. Вместо создания бизнес-логики и определения пользовательских разрешений для каждого клиентского приложения можно использовать средний уровень LightSwitch как место для централизации кода.

Доступ к службам LightSwitch OData

При развертывании приложения LightSwitch в трехуровневой конфигурации (при размещении среднего уровня в службах IIS или в Microsoft Azure) предоставляются конечные точки службы. Имена служб соответствуют именам источников данных. Например, приложение в примере в Пошаговое руководство. Создание приложения Vision Clinic в LightSwitch предоставляет две конечные точки службы, поскольку в нем имеется два источника данных: встроенная база данных с именем ApplicationData и присоединенная база данных SQL с именем PrescriptionContoso. Если бы приложение было развернуто на веб-сайте 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 можно опросить службу PrescriptionContoso клиники Vision Clinic, и она возвратит набор результатов, содержащий все записи из сущности Products.

Примечание

Чтобы просмотреть необработанные данные канала в Internet Explorer, необходимо отключить флажок Включить показ ленты чтения веб-канала.

В запросах OData учитывается регистр; если указать products вместо Products, запрос не возвратит никаких результатов. Кроме того, есть несколько способов уточнения запросов OData. Например, по запросу https://www.contoso.com/PrescriptionContoso.svc/Products(1) будет возвращен только продукт, имеющий ProductID, равный 1. Чтобы возвратить все продукты в категории Lens Care, можно использовать запрос https://www.contoso.com/PrescriptionContoso.svc/Products?Category='Lens Care’. При этом по-прежнему применяются все бизнес-правила или разрешения, указанные в LightSwitch. Поэтому пользователям, которым необходимо выполнить предыдущие запросы, необходимо разрешение на просмотр Products.

Аналогично, протокол OData задает стандартный способ навигации по связям с помощью свойств навигации. Например, запрос https://www.contoso.com/PrescriptionContoso/Products(1)/ProductRebates позволит найти скидки для продукта, который имеет ProductID равный 1 в связанной таблице ProductRebates. OData поддерживает множество других операций запроса, например OrderBy, Top, Skip и Sort.

Защита служб OData в LightSwitch

В большинстве случаев требуется отслеживать права доступа и обновления данных в службе OData. Можно контролировать доступ для приложений LightSwitch с помощью его параметров. В LightSwitch поддерживается три параметра аутентификации: None (Нет), Forms (Формы) и Windows.

Если выбрана аутентификация с помощью форм, то LightSwitch включает два режима аутентификации. Один режим — это пользовательский протокол, который используется диалоговым окном входа в систему. Для того чтобы передавать учетные данные и получать файлы cookie для аутентификации с помощью форм, в нем применяется пользовательский интерфейс API для веб-службы. Если в запросе данных отсутствует допустимый файл cookie для аутентификации с помощью форм, то LightSwitch в качестве отклика высылает вызов базовой аутентификации HTTP. Этот отклик позволяет клиентам, которые не были разработаны в LightSwitch, передать учетные данные по стандартному протоколу HTTP. Если выбрана аутентификация Windows, то LightSwitch требует от пользователя Windows, прошедшего аутентификацию, предоставить учетные данные. Для получения дополнительной информации см. Практическое руководство. Включение аутентификации в клиентском приложении Silverlight.

Какой бы механизм аутентификации вы ни использовали, имеет смысл использовать безопасность транспортного уровня по протоколу HTTPS, чтобы обезопасить учетные данные, токены и информацию. Если HTTPS не используется, то формы, основные учетные данные и токены аутентификации с помощью форм передаются в виде обычного текста. Аутентификация Windows более безопасна, но без HTTPS все данные, передаваемые между клиентом и сервером, по-прежнему будут обычным текстом. Чтобы избежать этого, в Мастере публикации в LightSwitch предусмотрен параметр HTTPS. При его использовании приложение требует наличия безопасного соединения. Если этот параметр включен, запросы перенаправляются с интерфейса HTTP на HTTPS, однако для этого потребуется получить сертификат HTTPS и настроить его на веб-сайте. Для получения дополнительной информации см. Вопросы безопасности LightSwitch.

В LightSwitch можно не только включать безопасность доступа к приложению, но и использовать безопасность на основе ролей, что позволит ограничивать доступ к отдельным сущностям. Например, просматривать сведения о заказах можно разрешить всем прошедшим аутентификацию пользователям, а сведения о зарплате — только заведующим. Для получения дополнительной информации см. Практическое руководство. Включение аутентификации в клиентском приложении Silverlight.

В LightSwitch нет механизма для прямого сокрытия или исключения наборов сущностей или свойств сущности из конечной точки OData. К какому бы объекту вы ни подключались на уровне данных, он будет видимым для конечной точки службы. Доступ к этим ресурсам можно контролировать с помощью встроенных методов управления доступом в коде службы данных. Для получения дополнительной информации см. Выполнения задач, связанных с данными, с помощью кода.

В следующем примере показан код, который не позволяет пользователю обновлять или удалять данные о сущности Products:

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. С помощью этого метода можно возвратить меньший набор записей сущности. Следующий пример возвращает только те записи Customer, у которых значение 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;
}

Использование служб OData в LightSwitch

Любое приложение, которое поддерживает OData на любой платформе, может использовать каналы OData из LightSwitch. В разных приложениях могут использоваться разные методы подключения к каналу OData, но обычно достаточно указать конечную точку службы LightSwitch.

В документации по LightSwitch приводится ряд примеров приложений, использующих OData.

См. также

Задачи

Практическое руководство. Включение аутентификации в клиентском приложении Silverlight

Пошаговое руководство. Предоставление доступа к службе OData и ее использование в LightSwitch

Пошаговое руководство. Использование данных LightSwitch в приложении для Магазина Windows

Пошаговое руководство. Использование служб LightSwitch в Excel с использованием PowerPivot

Основные понятия

Предоставление доступа к данным приложения LightSwitch

Вопросы безопасности LightSwitch

Выполнения задач, связанных с данными, с помощью кода