次の方法で共有


サービス操作 (WCF Data Services)

WCF Data Services では、データ サービスでサービス操作を定義して、サーバーでメソッドを公開できます。 その他のデータ サービス リソースと同様に、サービス操作は URI によってアドレス指定できます。 サービス操作では、データ サービスでビジネス ロジックを公開できます (検証ロジックの実装、ロール ベースのセキュリティの適用、特殊なクエリ機能の公開など)。 サービス操作は、DataService から派生するデータ クラスに追加されるメソッドです。 その他のすべてのデータ サービス リソースと同様に、パラメーターをサービス操作メソッドに指定できます。 たとえば、次のサービス操作 URI (クイック スタート データ サービスに基づく) は、London という値を city パラメーターに渡します。

https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'

このサービス操作の定義を次に示します。

<WebGet()> _
Public Function GetOrdersByCity(ByVal city As String) As IQueryable(Of Order)
[WebGet]
public IQueryable<Order> GetOrdersByCity(string city)

DataServiceCurrentDataSource を使用して、データ サービスが使用するデータ ソースに直接アクセスできます。 詳細については、「方法: サービス操作を定義する (WCF Data Services)」を参照してください。

サービス操作の要件

データ サービスでサービス操作を定義する場合、次の要件が適用されます。 これらの要件を満たしていないメソッドは、データ サービスのサービス操作として公開されません。

  • 操作は、データ サービス クラスのメンバーであるパブリック インスタンス メソッドである必要があります。

  • 操作メソッドは入力パラメーターだけを受け取ることができます。

  • パラメーターを定義する場合、各パラメーターの型はプリミティブ型である必要があります。

  • メソッドは次のいずれかを返す必要があります。

    • void (Visual Basic の場合は Nothing)。

    • IEnumerable

    • IQueryable

    • データ サービスが公開するデータ モデル内のエンティティ型。

    • プリミティブ クラス (整数や文字列など)。

  • 並べ替え、ページング、フィルター処理などのクエリ オプションをサポートするために、サービス操作メソッドから IQueryable が返される必要があります。 クエリ オプションを含むサービス操作への要求は、IEnumerable だけを返す操作で拒否されます。

  • ナビゲーション プロパティを使用した関連エンティティへのアクセスをサポートするために、サービス操作は IQueryable を返す必要があります。

  • メソッドには、[WebGet] 属性または [WebInvoke] 属性を使用して注釈を付ける必要があります。

    • [WebGet] では、GET 要求を使用してメソッドを呼び出すことができます。

    • [WebInvoke] では、POST 要求を使用してメソッドを呼び出すことができます。

  • サービス操作には、SingleResultAttribute を使用して注釈を付けることができます。この属性は、メソッドからの戻り値がエンティティのコレクションではなく 1 つのエンティティとなるように指定します。 この区別により、応答の結果のシリアル化、および追加のナビゲーション プロパティのトラバーサルを URI で表す方法が決定されます。 たとえば、AtomPub シリアル化を使用すると、1 種類のリソースのインスタンスがエントリ要素として表され、一連のインスタンスがフィード要素として表されます。

サービス操作のアドレス指定

メソッドの名前を URI の最初のパス セグメントに配置することによってサービス操作のアドレスを指定できます。 たとえば、次の URI は、関連する Order_Details オブジェクトと一緒に Orders オブジェクトの IQueryable コレクションを RequiredDate の降順で返す GetOrdersByCity 操作にアクセスします。

https://localhost:12345/Northwind.svc/GetOrdersByCity?city='London'&$expand=Order_Details&$orderby=RequiredDate desc

サービス操作の戻り値の型によっては、パス セグメントやクエリ オプションをさらに URI に追加できます。

有効な戻り値の型 URI のルール

void (Visual Basic の場合は Nothing)

または

エンティティ型

または

プリミティブ型

URI は、サービス操作の名前である 1 つのパス セグメントである必要があります。 クエリ オプションは許可されません。

IEnumerable

URI は、サービス操作の名前である 1 つのパス セグメントである必要があります。 結果型は IQueryable 型ではないので、クエリ オプションは使用できません。

IQueryable

サービス操作の名前であるパスに追加したクエリ パス セグメント セグメントが許可されます。 クエリ オプションも許可されます。

サービス操作のアクセス制御

サービス操作のサービス全体の表示は、エンティティ セットの表示が SetEntitySetAccessRule メソッドを使用して制御されるのと同じような方法で、IDataServiceConfiguration クラスの SetServiceOperationAccessRule メソッドによって制御されます。 たとえば、データ サービス定義内の次のコード行は、CustomersByCity サービス操作へのアクセスを有効にします。

config.SetServiceOperationAccessRule( _
    "GetOrdersByCity", ServiceOperationRights.AllRead)
config.SetServiceOperationAccessRule(
    "GetOrdersByCity", ServiceOperationRights.AllRead);
Cc668788.note(ja-jp,VS.100).gif注 :
元になるエンティティ セットの制限アクセスによって非表示にされている戻り値の型がサービス操作にある場合、サービス操作はクライアント アプリケーションで使用できません。

詳細については、「方法: サービス操作を定義する (WCF Data Services)」を参照してください。

参照

概念

インターセプター (WCF Data Services)