QueryInterceptor di WCF Data Service
WCF Data Services (disebut juga dengan Astoria / ADO .Net Data Services di Framework 3.5) memungkinkan kita untuk memodifikasi data melaluli Interface HTTP RESTful. WCF Data Services ini mensupport beberapa kembalian data bertipe XML, JSon dan AtomPub. Pada kesempatan kali ini kami mencoba memberikan contoh bagaimana menggunakan QueryInterceptor data di WCF Data Service . Berikut ini langkah-langkahnya :
1. Buka VS 2010 anda.
2. Create New Project –> ASP .Net Empty Web Application (disini kami menggunakan VB .Net)
3. Simpan dengan nama AkademikDataService
4. Pilih Menu Project –> Add New Item…… , kemudian Pilih ADO .Net Entity Data Model
5. Beri Nama dengan AkademikModel.
6. Akan tampil jendela Choose Model Content.. , kemudian pilih Next.
7. Setting Data Connection anda, (di contoh ini konek ke Database Akademik), jangan Lupa disimpan nama Entity Connection di Web Config
8. Pilih database Objectnya. Dicontoh ini kami memilih Tabel yang ada di Database Akademik, kemudian tekan Finish.
10. Pilih Menu Project –> Add New Item…… , kemudian Pilih WCF Data Service
11. Beri Nama dengan AkademikDataService.svc
12. Buka file AkademikDataService.svc.vb kemudian ketikkan code berikut :
di Code ini terdapat perintah QueryInterceptor untuk mengembalikan data Mahasiswa yang namanya sesuai dengan user yang sedang login.
1: Imports System.Data.Services
2: Imports System.Data.Services.Common
3: Imports System.Linq
4: Imports System.ServiceModel.Web
5: Imports System.Linq.Expressions
6:
7: Public Class AkademikDataService
8: ' TODO: replace [[class name]] with your data class name
9: Inherits DataService(Of AkademikEntity)
10:
11: ' This method is called only once to initialize service-wide policies.
12: Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration)
13: ' TODO: set rules to indicate which entity sets and service operations are visible, updatable, etc.
14: ' Examples:
15: config.SetEntitySetAccessRule("*", EntitySetRights.All)
16: ' config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All)
17: config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2
18: End Sub
19:
20: <QueryInterceptor("Mahasiswas")> _
21: Public Function OnQueryMahasiswas() As Expression(Of Func(Of Mahasiswa, Boolean))
22: Dim Nama() As String
23: Nama = Split(HttpContext.Current.User.Identity.Name, "\", 0, CompareMethod.Text)
24:
25: Return Function(m As Mahasiswa) m.Nama = Nama(1)
26: End Function
27: End Class
13. Jalankan AkademikDataService.svc maka akan tampil
14. Tambahkan New Project “ASP .Net Empty Web Application” Melalui File –> Add –> New Project
15. Beri Nama dengan WCFClient
16 Tambahkan Satu Buah WebForm berinama dengan Default.aspx
17. Buat Tampilan Seperti Berikut ini (Button dan GridView).
18. Tambahkan Service Reference melalui Menu Project –> Add Service Reference…
19. Kemudian ketikkan “http://localhost:1065/AkademikDataService.svc/” pada TextBox Address, beri nama ServiceAkademik
20. Ketikkan code berikut ini di Default.aspx.vb
1: Imports System.Data.Services.Client
2: Imports WCFClient.ServiceAkademik
3: Imports System.Data.Services
4: Imports System.Data.Services.Common
5: Imports System.Linq
6: Imports System.Linq.Expressions
7: Imports System.ServiceModel
8: Public Class _Default
9: Inherits System.Web.UI.Page
10:
11:
12: Protected Sub btnSimpan_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnLoad.Click
13: LoadGrid()
14: End Sub
15: Sub LoadGrid()
16: Dim svc As New AkademikEntity(New Uri("http://localhost:1065/AkademikDataService.svc/"))
17: GridView2.DataSource = svc.Mahasiswas
18: GridView2.DataBind()
19: End Sub
20:
21:
22: End Class
21. Jalankan Default.aspx maka akan tampil berikut ini
22. Sebelumnya saya login dengan user ferry (ditampung di HttpContext.Current.User.Identity.Name), maka QueryInterceptor yang ada di AkademikDataSerivice akan meng-query data Mahasiswa yang namanya sesuai dengan user yang login (tidak dapat melihat data user lainnya).
23. Terima Kasih & Semoga Bermanfaat :)