我有一個簡單的WCF數據服務設置。我使用了Linq-to-SQL解決方案。如何添加一個簡單的計數WCF數據服務
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 aggregate operators, such as count, are not supported,我想出一個體面的解決辦法是創造了count.So我添加了一個方法
[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數據服務專家,所以如果有人有這個想法,我很樂意聽到他們。我剛開始對OData和WCF數據服務的冒險,我想採取一種很好的方法來處理事情。非常感謝。