Chúng tôi cần cung cấp API cho Nguồn cấp dữ liệu Hoạt động (nghĩ về Facebook) và chúng tôi quyết định thử OData. Chúng tôi đang sử dụng .NET vì vậy chúng tôi đã đi cho WCF dịch vụ dữ liệu nhưng chúng tôi không sử dụng Entity Framework (hoặc bất kỳ ORM khác) vì vậy chúng tôi sẽ sử dụng các nhà cung cấp phản ánh. Bởi vì chúng tôi có logic kinh doanh phức tạp cho các phương thức truy xuất của chúng tôi, chúng tôi đã quyết định hiển thị chúng dưới dạng hoạt động dịch vụ. Tuy nhiên, chúng tôi muốn hiển thị Xóa/Cập nhật và chọn thực thể đơn lẻ làm tài nguyên REST OData bình thường. Câu hỏi của tôi là làm thế nào chúng ta có thể thực hiện một nguồn dữ liệu cho nhà cung cấp phản chiếu hạn chế quyền truy cập vào bộ sưu tập nhưng cho phép truy cập vào các thực thể đơn lẻ (yêu cầu bằng khóa), cho phép các động từ DELETE/PUT/POST và cho phép truy cập các bộ sưu tập con của các thực thể đơn lẻ./Thể loại (1)/Sản phẩm). Về cơ bản, tôi chỉ muốn hạn chế quyền truy cập vào các bộ sưu tập cơ sở (nghĩa là dịch vụ/Danh mục hoặc dịch vụ/Sản phẩm)Dịch vụ ODF WCF với Nhà cung cấp Phản ánh
6
A
Trả lời
5
Không có câu trả lời tuyệt vời ở đây.
Có hai cài đặt bạn có thể sử dụng bên trong InitializeService (..)
config.SetEntitySetAccessRule("Feed", EntitySetRights.ReadSingle);
config.SetEntitySetPageSize("Feed", 1);
Đáng tiếc là không phải thực hiện chính xác những gì bạn muốn:
EntitySetRights.ReadSingle
giới hạn bạn để trở về chỉ là một đối tượng từ bộ đó. Mà không thành công vì nó không cho phép này/Categories (1)/Sản phẩm VÀ nó cũng cho phép/Categories? $ Filter = ... để trả về một hàng.SetEntitySetPageSize
hạn chế số lần tải ban đầu chỉ vào một bản ghi nhưng bạn có thể làm theo $ skiptoken để đi và nhận phần còn lại của dữ liệu một lần và giống như (1) nó cho phép truy vấn tùy ý không chỉ các vị từ khóa.
Điều đó khiến bạn chỉ có một tùy chọn thực tế. Truy cập biểu thức LINQ và làm việc nếu bạn cho phép những gì đang được thử.
Vì bạn đang sử dụng nhà cung cấp Phản ánh, về cơ bản bạn cần bọc các IQueryables được trả về từ lớp 'ngữ cảnh' và tìm kiếm các truy vấn không hợp lệ trước khi chuyển chúng.
Không phải thứ gì đó dành cho người bị ngất.
Nếu bạn quyết định đi xuống con đường đó, bạn sẽ tìm thấy IQueryable wrapping example hữu ích của mình và bạn cũng nên xem Viteks blog post series on Data Service expressions.
Hope this helps
Alex (Chương trình quản lý OData)
Thank you very much. Tôi thực sự đọc ví dụ gói của bạn và chuỗi nhà cung cấp dữ liệu tùy chỉnh khi tôi đang đánh giá các tùy chọn. Các giải pháp đầu tiên không có vẻ xấu như vậy thực sự. Tôi sẽ phải kiểm tra xem có bao nhiêu thực thể sẽ có các bộ sưu tập con và bao nhiêu tôi sẽ phải làm việc xung quanh. Một điều tôi đang lang thang là nếu nó là OK để chỉ ném ngoại lệ trong tình huống này. Nó có vẻ xấu nhưng các tùy chọn khác cũng không đẹp. Gói IQueryable có vẻ thực sự đau đớn. Thành thật mà nói tôi muốn thả các giải pháp OData và đi cho một số loại hình dịch vụ khác hơn làm điều này. – Stilgar