0

簡単な WCF Data Service をセットアップしました。私は Linq-to-SQL ソリューションを使用しました。

public class MyDataService : DataService<SomeDataContext>
{
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
            config.SetEntitySetPageSize("*", 20);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
        }

私はLinqを使用しているので、キーの部分クラスを追加する必要がありました

[DataServiceKey("MessageId")]
public partial class Message
{
}

[DataServiceKey("UserId")]
public partial class User
{
}

...

そのため、メッセージを送信した特別なユーザーを取得するためのプリミティブ メソッドを追加したいと考えています。カウントなどのLinq集計演算子はサポートされていないため、適切な回避策はカウント用の読み取り専用リソースエンドポイントを作成することであると考えました。そこでメソッドを追加しました

   [WebGet]
    public int NumSpecialUsers()
    {
        var context = new SomeDataContext();
        int numUsers =
            context.Messages
            .Where(x => x.special == true && x.UserId != null)
            .Select(x => x.UserId)
            .Distinct()
            .Count();

        return numUsers;
    }

必要な構成をに追加しましたInitializeService()

    config.SetServiceOperationAccessRule("NumUsers", ServiceOperationRights.AllRead);

localhost:1234/MyDataService.svc/NumSpecialUsers 経由でメソッドを正常に呼び出すことができますが、localhost:1234/MyDataService.svc でこのメソッドを検出することはできません。これは正しくないようです。localhost:1234/MyDataService.svc に表示されないことは、検出できないエンドポイントを意味するため、REST に違反します。これは、Visual Studio を使用して OData Linq プロキシを作成する場合にも、そこにメソッドが表示されないことを意味します。

私はRESTでもありません | OData | WCF Data Services の専門家なので、これについて考えている人がいれば、ぜひ聞いてみたいと思います。私は OData と WCF Data Services への冒険を始めたばかりで、良いアプローチを取りたいと思っています。どうもありがとう。

4

1 に答える 1

0

問題は、サービス オペレーションがサービス ドキュメントに表示される場合、サービス オペレーションがパラメータを取る場合、URL はどのようになるかということです。

サービス操作をまったく表示しないか、パラメーターを取らないサービス操作のみを表示するかの選択肢がありましたが、一貫性の面で誤りを犯し、前者を選択しました。

パラメーターをとらないサービス操作のみを表示する方がよいと思われる場合は、議論を聞きたいと思います。また、この機能について多くのフィードバックが得られれば、変更を加えることもできます。

ありがとうプラティック

于 2012-10-02T19:58:58.507 に答える