データ ソースとしての LightSwitch

LightSwitch は、アプリケーションの作成に使用するほか、他のアプリケーションにデータを提供する中間層としても使用できます。LightSwitch から Web サーバーまたは Windows Azure にアプリケーション データを発行すると、そのデータは OData (Open Data Protocol) サービスとして公開されます。OData には Web を介したデータ サービスとの通信規格があります。現在、多くの企業は OData を使用してシステムとパートナー間でデータをやり取りしており、さらにそれらのデータ ストアにアクセスすることもできます。OData は標準プロトコルであるため、ほとんどのプラットフォームやデバイスにある他のクライアント アプリケーションは、LightSwitch によって作成または公開するデータにアクセスできます。

OData サービスの作成

OData サービスはアプリケーションのデータ ソースごとに自動的に作成され、データ ソースごとに個別のエンドポイントがあります。この機能は、組み込みのデータベースで定義するテーブルだけでなく、SQL Server データベース、SharePoint リスト、別の OData サービスなど、アタッチされたデータ ソースにも適用されます。

LightSwitch により複数の OData エンドポイントが公開されます

エンティティに対して定義したビジネス ロジックとユーザー アクセス許可は、エンドポイントがアクセスされると実行され、クライアントがサービスにアクセスしていても実行されます。各クライアント アプリケーションに対するビジネス ロジックの作成とユーザー アクセス許可の定義ではなく、コードを集中化する場所として LightSwitch 中間層を使用できます。

LightSwitch OData サービスへのアクセス

LightSwitch アプリケーションを 3 層の構成 (インターネット インフォメーション サービスまたは Windows Azure の中間層をホストする) で配置すると、サービス エンドポイントが公開されます。サービスの名前はデータ ソースの名前に対応します。たとえば、チュートリアル: Vision Clinic アプリケーションの作成 のサンプル アプリケーションは、2 つのサービス エンドポイントを公開します。これは、組み込まれている ApplicationData データベースと、アタッチされている PrescriptionContoso SQL データベースの 2 つのデータ ソースがあるためです。アプリケーションを "www.contoso.com" という名前の Web サイトに配置すると、サービス エンドポイントは https://www.contoso.com/ApplicationData.svchttps://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) クエリを使用すると、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 クエリを使用すると、関連する ProductRebates テーブルから ProductID が 1 である製品のリベートが検索されます。OData は、このほかにも OrderBy、Top、Skip、Sort などの多くのクエリ操作をサポートしています。詳細については、「OData: URI 規則に関する Web ページ」を参照してください。

LightSwitch OData サービスの保護

ほとんどの場合、OData サービスのデータのアクセスと更新を行うことができるユーザーを管理する必要があります。LightSwitch アプリケーションへのアクセスは、この設定を使用することで制御できます。LightSwitch は、なし、フォーム、Windows の 3 種類の認証設定をサポートしています。

フォーム認証を選択すると、LightSwitch では 2 つのモードの認証が有効になります。そのうちの 1 つのモードは、[ログイン] ダイアログ ボックスで使用されるカスタム プロトコルであり、カスタム API を使用して Web サービスにより資格情報を渡してフォーム認証 Cookie を取得できるようにします。データの要求に有効なフォーム認証 Cookie がない場合、LightSwitch は HTTP Basic チャレンジに応答します。この応答により、LightSwitch で開発されていないクライアントが、標準 HTTP プロトコルを介して資格情報を渡すことができるようになります。Windows 認証を選択すると、LightSwitch は、認証された Windows ユーザーに資格情報の提供を要求します。詳細については、「LightSwitch の認証と承認」を参照してください。

どの認証方法を使用した場合でも、HTTPS を介したトランスポート レベルのセキュリティを使用して資格情報、トークン、およびデータを保護することを検討する必要があります。HTTPS を使用しないと、フォーム、基本資格情報、およびフォーム認証トークンはプレーンテキストとして転送されます。Windows 認証は安全ですが、HTTPS を使用しないと、クライアントとサーバーの間で渡されるどのデータもプレーンテキストのままになります。これを軽減するため、LightSwitch には、セキュリティで保護された接続をアプリケーションに要求する発行ウィザードに HTTPS 設定があります。この設定を有効にすると、要求は HTTP から HTTPS にリダイレクトされますが、自身の Web サイトで HTTPS 証明書を取得して構成する必要があります。詳細については、「LightSwitch に関するセキュリティ上の考慮事項」を参照してください。

アプリケーションへのアクセスのセキュリティ保護に加えて、LightSwitch のロールベースのセキュリティを使用して、特定のエンティティへのアクセスを制限することもできます。たとえば、認証されたすべてのユーザーが注文データを表示できるようにし、スーパーバイザーのみが給与データを表示できるようにします。詳細については、「LightSwitch の認証と承認」を参照してください。

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 メソッドを使用した行レベルのフィルター処理が用意されています。このメソッドを使用して、エンティティから小さなレコード セットを返すことができます。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 の認証と承認

チュートリアル: LightSwitch での OData サービスの公開と使用

チュートリアル: Windows ストア アプリでの LightSwitch データの使用

チュートリアル: PowerPivot を使用した Excel での LightSwitch サービスの使用

概念

LightSwitch アプリケーション データの公開

LightSwitch に関するセキュリティ上の考慮事項

コードを使用したデータ関連タスクの実行