簡単な 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 への冒険を始めたばかりで、良いアプローチを取りたいと思っています。どうもありがとう。