Ferry Kurniawan

Every Accomplishment Start With The Decision to Try
See also: Other Geeks@INDC

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.

1 

 

 

 

 

 

 

 

7. Setting Data Connection anda, (di contoh ini konek ke Database Akademik), jangan Lupa disimpan nama Entity Connection di Web Config

2 

3

8. Pilih database Objectnya. Dicontoh ini kami memilih Tabel yang ada di Database Akademik, kemudian tekan Finish.

4  5

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

6

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).

9

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

11

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 :)

Share this post: | | | |

Comments

inthane_cute said:

waw, asyik pak fery nulis WCF Data Service, mau nanya ni pak,

1. buat liat hasilnya mmg harus nulis localhost/AkademikDataService.svc kh pak?

2. localhostnya sama kh pak, disetiap kompter?

3. klo misalnya klik kanan pada AkademikDataService.svc trus, view in browser ada bedanya nggak pak?

He, nanyanya banyak bgt... mkasih pak.

# August 31, 2010 8:29 PM