Wcf ria là gì

Hey there! Thanks for dropping by trungbq! Take a look around and grab the RSS feed to stay updated. See you around!

Tổng quan

Trong phần trước, tôi đã giới thiệu sơ qua về WCF RIA Services thông qua một ví dụ tựa “Hello World”. Nó dường như quá đơn giản và không thể sử dụng trong ứng dụng thực tế. Đối với ứng dụng thực tế, bạn cần phải biết cách làm thế nào để tùy chỉnh services và sử dụng nó ở client như thế nào. Trong bài viết này, tôi sẽ đi sâu hơn một chút vào quá trình truy vấn dữ liệu từ client. Tôi cũng sẽ lướt qua về quy ước đặt tên phương thức được định nghĩa trong domain service, cũng như cách làm thế nào để làm điều đó sử dụng attribute thay vì theo đúng quy ước. Tôi cũng sẽ hướng dẫn cách dùng các truy vấn từ client. Cuối cùng, tôi sẽ nói về cách sử dụng dữ liệu từ các nguồn dữ liệu khác Entity Framework.Bạn đang xem: Wcf ria là gì

Để bắt đầu bạn nên sử dụng kết quả đã làm được từ phần trước. Bạn có thể download tại đây (khác).Bạn đang xem: Dịch vụ wcf ria là gì?

Download code hoàn chỉnh của bài viết này tại đây (khác).

Bạn đang xem: Wcf ria là gì

Bước 1: Thêm tham số cho câu truy vấn

Trong bài viết trước, sau khi được tạo xong, trong domain service có một phương thức truy vấn như thế này:

1: public IQueryable GetTasks() 2: { 3: return this.ObjectContext.Tasks; 4: }Câu truy vấn này trả về tất cả các Task trong database dưới dạng một IQueryable. Nếu bạn muốn có các truy vấn cụ thể hơn chứ không phải trả về tất cả các dòng, bạn có thể thêm các phương thức truy vấn cụ thể vào domain service và nó sẽ được tự sinh ra ở client side. Bạn cũng có thể chọn kiểu trả về làIEnumerable, nhưng nếu các provider bên dưới (Entity Framework hoặc LINQ to SQL) trả vềIQueryable, bạn cũng nên trả về kiểu IQueryable thay vì chuyển kiểu.

Xem thêm:  Hướng dẫn cách chơi path of exile giành chiến thắng đơn giản

Một trường hợp thường gặp là ứng dụng của bạn cho phép người dùng lấy các Task trong một khoảng thời gian. Để hỗ trợ điều đó, bạn thêm phương thức sau vào domain service

public IQueryable GetTasksByStartDate( DateTime lowerDateTimeInclusive, DateTime upperDateTimeInclusive){ return this.ObjectContext.Tasks.Where( t => t.StartDate >= lowerDateTimeInclusive && t.StartDate

Bước 2: Thêm giao diện để thực hiện các truy vấn

Để gọi các truy vấn tìm kiếm thay vì gọi GetTasks lúc Page_Load, bạn cần chỉnh sửa giao diện một tí. Mở trang MainPage.xaml, giảm kích thước của DataGrid để chừa chỗ trống thêm vào hai TextBox và một Button như dưới đây

*

Đặt tên cho TextBox thứ nhất là lowerDate, TextBox thứ hai là upperDate và Button là searchButton. Nhấp đúp vào button để thêm hàm xử lý sự kiện.

Bước 3: Thực thi câu truy vấn từ client thông qua DomainContext

Như đã giới thiệu trong phần 1, DomainContext là bản sao của DomainService được tự sinh ra ở client side. Trong ứng dụng này, tương ứng với domain service TasksDomainService ở server side, domain context ở client side là TasksDomainContext. Nó cung cấp khả năng gọi bất đồng bộ và gửi các thay đổi trên entity (được thực hiện ở client) đến server side. DomainContext thực sự là bộ não của WCF RIA Service ở phía client. Bất cứ khi nào bạn thực thi truy vấn để lấy các entity từ server thông qua domain context, nó đều giữ lại liên kết đến các entity đó và cả những thay đổi trên các entity đó. Vì vậy, nếu bạn chỉnh sửa những đối tượng đó, nó biết có sự thay đổi và có thể gửi ngược lại server khi bạn quyết định cập nhật những thay đổi đó. Tôi sẽ nói nhiều hơn trong bài viết kế tiếp. Còn trong bài viết này, chúng ta tập trung vào việc lấy dữ liệu.

Xem thêm:  Virus chest là gì

Thêm đoạn code sau vào hàm xử lý sự kiện button searchButton

private void searchButton_Click(object sender, RoutedEventArgs e){ DateTime lowerDateVal; DateTime upperDateVal; GetDates(out lowerDateVal, out upperDateVal); TasksDomainContext context = new TasksDomainContext(); taskDataGrid.ItemsSource = context.Tasks; EntityQuery query = context.GetTasksByStartDateQuery(lowerDateVal, upperDateVal); LoadOperation loadOp = context.Load(query);}Đoạn code quan trọng ở đây là bốn dòng cuối. Để gọi đến server side, bạn cần một instance của domain context. Trong ứng dụng thực tế, bạn cần giữ domain context lại vì đó là nơi lưu các thay đổi trên đối tượng để cập nhật. Thông thường, bạn sẽ khai báo nó trong view model hoặc phạm vi ứng dụng. Tôi sẽ nói rõ hơn trong phần 4 của loạt bài này.

Domain context có property là một collection các entity được trả về bởi các phương thức truy vấn ở domain service. Trong ví dụ này, domain service chỉ kết xuất một collection các Task. Để ý rằng dòng lệnh gán ItemsSource của DataGrid bằng context.Tasks trước khi gọi bất kỳ truy vấn nào. Vì khi bạn truy vấn thông qua domain context, câu truy vấn được gọi bất đồng bộ và sẽ thay thế nội dung của collection ngay khi nhận được dữ liệu trả về từ server. Collection này (context.Tasks) hiện thực eventINotifyCollectionChanged và sẽ raise event để DataGrid tự cập nhật lại khi nhận được event này.

Đây tương tự những gì xảy ra với DomainDataSource được sử dụng trong XAML ở bài viết trước.

Xem thêm: Lạp Xưởng Tươi Đặc Sản Cần Đước Nổi Tiếng Làm Quà, Đài Phát Thanh Và Truyền Hình Long An

Bước 4: Thêm câu truy vấn trả về một entity duy nhất

Để trả về một entity thay vì một collection bạn chỉ cần định nghĩa nó trên domain service. Một phương thức truy vấn tương ứng sẽ được tạo trong domain context sau khi biên dịch.

public Task GetTask(int taskId){ return this.ObjectContext.Tasks.FirstOrDefault(t => t.TaskId == taskId);}

Quy ước đặt tên phương thức

Đây là một xu hướng mới nổi trong phát triển .NET – làm giảm lượng cấu hình trong code dựa vào một số quy ước đặt tên. Có một số tiền tố WCF RIA Services nhận biết được với các phương thức cập nhật, thêm mới, xóa như UpdateTask, InsertTask, DeleteTask (và các tiền tố khác như Change, Modify, Add, Create, Remove).

Xem thêm:  Ctns là gì

Bạn cũng có thể cấu hình bằng cách sử dụng các attribute. Ví dụ với các câu truy vấn, bạn sử dụng attribute . Những phương thức có kiểu trả về là IQueryableIEnumerable hoặc một entity cũng được xác định rõ ràng là một phương thức truy vấn. Một trong những lợi thế của việc sử dụng atrribute là nó hỗ trợ thêm một vài thứ như số lượng phần tử tối đa trong kết quả trả về.

Bạn có thể tham khảo thêm một số quy ước đặt tên tại đây.

Tùy chỉnh Domain Service

Bạn không muốn sử dụng Entity Framework? Một lựa chọn khác là LINQ to SQL. Theo ý kiến cá nhân, tôi đề nghị bạn nên sử dụng Entity Framework nếu bạn bắt đầu một dự án mới. Nó thực sự có khả năng và có vẻ sẽ là phương pháp truy xuất dữ liệu từ .NET tốt được sử dụng lâu dài. LINQ to SQL cũng được hỗ trợ thông qua WCF RIA Services Toolkit nếu bạn thực sự muốn sử dụng nó.

Xem thêm: Kinh Nghiệm Du Lịch Na Hang, Tuyên Quang (Cập Nhật 06/2021)

Để làm điều này, bạn chỉ cần kế thừa domain service của bạn trực tiếp từ class DomainService, thay vì kế thừa từ LinqToEntitiesDomainService. Trong cửa sổ Add New Domain Service Class (Add > New Item > Domain Data Service) chỉ cần chọn “empty domain service class” trong Available DataContext/ObjectContext. Sau đó tự định nghĩa các entity, trả về IEnumerable nếu các nguồn dữ liệu bên dưới không hỗ trợ IQueryable và làm bất cứ điều gì bạn cần trong các phương thức trên nguồn dữ liệu tương ứng.

Chuyên mục: Tin Tức

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *