0

C# を使用して、 OData を使用して型指定されていないカスタム データ サービス プロバイダーを生成しています。
必要なすべてのプロバイダーとインターフェースを実装しました。
すべてのエンティティは、メタ データの作成時にのみ動的に指定されます。
EDMX または Reflection プロバイダーは使用できません。
すべてのアクセス権が提供されます。

1) カスタムメタデータプロバイダー

public bool TryResolveResourceType(string name, out ResourceType resourceType)  
{  
    return this.resourceTypes.TryGetValue(name, out resourceType);  
}
public bool TryResolveServiceOperation(string name, out ServiceOperation serviceOperation)  
{
    if (serviceOperations.TryGetValue(name, out serviceOperation))
    {
        serviceOperation.SetReadOnly();
        return true;
    }
    else
    {
        serviceOperation = null;
        return false;
    }            
}

2) カスタムデータクエリプロバイダー

public object InvokeServiceOperation(ServiceOperation serviceOperation, object[] parameters)
{
//Invoke the method present in ServiceOperation
}

次の URL
http://localhost/SampleService.svc/TestEntity(1)/Id>
を指定すると、id 値を取得できます。

URL
http:// localhost/SampleService.svc/TestServiceOperation
を使用してサービスを呼び出すと、サービス操作を呼び出すことができます。

しかし、Serv.Op. エンティティを指定した後、エラー
http://localhost/SampleService.svc/TestEntity/TestServiceOperationが発生します

この URL を使用すると、対応する TestEntityResourceSet が検出され
、name=TestServiceOperation のリソース タイプが検出されます。
ただし、TestServiceOperation にはリソース タイプはありません。対応する SO 名を使用して、TryResolveServiceOperation で検索する必要があります。

ネットで検索されたすべての例は、Ser.Op を呼び出すようなものでした。.svc/SO タイプの後のみ。
エンティティごとに個別にサービス操作を呼び出す必要があります。お気に入り

http:// localhostTest.svc/Entity1/SerOp1 http:// localhostTest.svc/Entity2/SerOp2

これを行う方法の良い例はありますか? ありがとう。

4

1 に答える 1

0

EntityType にバインドされたアクションを探しているようです。10.4.1を参照してください。詳細については、OData V3.0 プロトコルのアクションを参照してください。

于 2014-02-21T08:56:40.667 に答える