Tóm tắt
Có rất nhiều cách để đưa dữ liệu vào ứng dụng Silverlight của bạn. Bài viết này hướng dẫn bạn cách chọn giải pháp phù hợp với yêu cầu.
Bài viết này gồm các phần:
Dữ liệu có thể tồn tại ở nhiều nơi khác nhau. Ví dụ, dữ liệu chỉ đọc có thể được lưu trữ ở local file trong chương trình của bạn. Dữ liệu người dùng cụ thể có thể được lưu trữ cục bộ trong một vùng được gọi là isolated storage. Dữ liệu cũng có thể được lưu trữ trên internet và có thể truy cập thông qua Web services.

Bạn có thể sử dụng các tập tin, chẳng hạn như các tập tin văn bản và XML, để lưu dữ liệu chỉ đọc trong ứng dụng Silverlight. Các tập tin đó có thể được biên dịch thành Resource Files hoặc Content Files.
Resource Files
Resource Files được nhúng trực tiếp vào trong assembly (.dll, .exe) của project khi bạn biên dịch chương trình. Bạn có thể sử dụng Resource Files trong hay ngoài ứng dụng Silverlight (tập tin .xap). Ưu điểm của Resource Files là tập tin luôn luôn có sẵn cho ứng dụng. Trong Visual Studio (VS) gán giá trị cho thuộc tính Build Action là Resource để chỉ rõ tập tin đó là Resource Files. Tuy nhiên, ứng dụng của bạn có thể sẽ khởi động lâu hơn nếu sử dụng Resource Files. Bạn có thể truy cập Resource Files bằng hàm Application.GetResourceStream.
Bạn thường sử dụng Resource Files trong các trường hợp sau:
- Bạn không cần phải cập nhật Resource Files sau khi biên dịch chương trình.
- Bạn muốn đơn giản hóa việc phân phối ứng dụng bằng cách giảm số lượng các tập tin phụ thuộc.
- Bạn không quan tâm nhiều đến thời gian khởi động ứng dụng.
Content Files
Content Files không được nhúng trực tiếp vào assembly của project mà được đóng gói kèm vào trong ứng dụng Silverlight (tập tin .xap). Mặc dù Content Files không được biên dịch vào trong assembly nhưng mỗi assembly đều có thông tin về Content Files để có thể sử dụng nó. Content Files có thể được chia sẻ và sử dụng bởi nhiều assembly trong cùng một ứng dụng. Chỉ rõ tập tin là Content Files bằng cách gán giá trị cho thuộc tính Build Action trong VS là Content. Bạn có thể xem ví dụ về cách sử dụng hàm XElement.Load để truy cập Content Files tại REST Services QuickStarthoặc LINQ to XML QuickStart.
Bạn thường sử dụng Content Files trong các trường hợp sau:
- Bạn muốn cập nhật Content Files mà không cần biên dịch lại chương trình sử dụng nó.
- Bạn quan tâm đến thời gian khởi động ứng dụng.
Nếu bạn cần phải lưu trữ và lấy thông tin cụ thể người sử dụng, bạn có thể xem xét sử dụng Isolated Storage. Bạn không thể truy cập trực tiếp vào hệ thống tập tin của hệ điều hành từ Silverlight. Tuy nhiên, bạn có thể sử dụng Isolated Storage để lưu trữ dữ liệu người dùng trên máy tính của người dùng hoặc thiết bị. Có hai cách sử dụng Isolated Storage. Cách đầu tiên là để lưu hoặc lấy dữ liệu thông qua key/value pairs bằng cách sử dụng class IsolatedStorageSettings. Cách thứ hai là sử dụng class IsolatedStorageFile. Để biết thêm thông tin, xem Isolated Storage QuickStart.
Làm việc với Web services có thể gây cho bạn chút bối rối vì sự khác nhau về loại hình, định dạng và công nghệ. Để giúp bạn hiểu cơ bản về Web services, chúng ta xem qua các thuật ngữ liên quan sau đây.
| Thuật ngữ |
Mô tả |
| Web service |
Một ứng dụng cung cấp dữ liệu và dịch vụ cho các ứng dụng khác. Các ứng dụng truy xuất Web services bằng các giao thức web và định dạng dữ liệu chuẩn như HTTP, XML và SOAP, không phụ thuộc vào cách hiện thực một Web services như thế nào. |
| REST |
(Representational State Transfer Protocol) Một giao thức cho hiện tài nguyên trên web để có thể truy cập từ clients. |
| POX |
(Plain Old XML) Một thuật ngữ dùng để chỉ XML cơ bản. |
| JSON |
(JavaScript Object Notation) Một định dạng gọn nhẹ cho trao đổi dữ liệu. Nó được thiết kế cho người dễ đọc, nhưng cũng dễ dàng phân tích bằng máy tính. |
| OData |
(Open Data Protocol) Một giao thức web để truy vấn và cập nhật dữ liệu. |
| SOAP |
(Simple Object Access Protocol) Một giao thức gọn nhẹ dành cho trao đổi dữ liệu có cấu trúc trong môi trường phân tán. |
| Atom |
Được mô tả trong hai chuẩn: Atom Syndication Format và Atom Publishing Protocol. |
| RSS |
(Really Simple Syndication) Một định dạng cung cấp nội dung web. |
| socket |
Một điểm cuối trong giao tiếp hai chiều giữa process và process thông qua mạng IP như Internet. |
Có một số công nghệ mạng và Web services mà bạn có thể sử dụng để lấy dữ liệu vào ứng dụng Silverlight của bạn. Những công nghệ này bao gồm:
Bạn có thể truy cập các Web services hoặc tài nguyên trên một máy chủ trực tiếp từ một ứng dụng Silverlight bằng cách sử dụng class HttpWebRequest/HttpWebResponse hoặc WebClient trong namespace System.Net. Các lớp này cung cấp các chức năng cần thiết để gửi request cho bất kỳ Web services nào đang hoạt động thông qua giao thức HTTP. Silverlight không hỗ trợ khả năng lưu trữ dựa trên các dịch vụ HTTP, do đó các lớp này hữu ích khi các ứng dụng Silverlight sử dụng một Web service hiện có. Bạn thường sử dụng các lớp này nếu các HTTP service được cung cấp bởi các hãng thứ ba và không nằm trong vòng kiểm soát của bạn, và response của service là XML hoặc JSON. Bạn có thể sử dụng các lớp này để tạo request, đảm bảo các request phù hợp với định dạng của service. Tuy nhiên, nếu bạn đang tự xây dựng các service dựa trên một mô hình dữ liệu hiện có, Silverlight cung cấp nhiều giải pháp hữu ích, có thể được xây dựng sử dụng WCF được mô tả trong phần kế tiếp.
Để biết thêm thông tin về cách sử dụng class WebClient để truy cập các Web services, xem REST Services QuickStart và Syndication Feeds QuickStart.
Để biết thêm thông tin về bảo mật HTTP và truy cập Web services bằng cách sử dụng class HttpWebRequest/HttpWebResponse hoặc WebClient, xem HTTP Communication and Security with Silverlight.
Windows Communication Foundation (WCF) là một framework dùng để tạo và truy cập Web services. WCF cho phép bạn tạo ra một class như một service và trao đổi các đối tượng giữa Silverlight và service. Trong ứng dụng Silverlight, bạn có thể sử dụng công cụ, chẳng hạn như Visual Studio, để tạo ra một proxy cho service. Proxy này cho phép bạn truy cập vào các service như thể nó là một class của chương trình. WCF service hỗ trợ nhiều giao thức (bao gồm cả HTTP và TCP) và nhiều định dạng, như SOAP, XML, và Atom. Để biết thêm thông tin, xem Web Services QuickStart.
WCF Data Services, trước đây gọi là ADO.NET Data Services, là một framework dùng để truy cập dữ liệu từ data model hiện có của bạn theo kiểu REST. WCF Data Services thể hiện dữ liệu dưới dạng Open Data Protocol (OData). Ngoài ra, nếu ứng dụng Silverlight của bạn tương tác với SharePoint, SharePoint 2010 cung cấp dữ liệu kiểu WCF Data Services. WCF Data Services xử lý tất cả từ giao tiếp HTTP, serialization và các nhiệm vụ khác mà bạn phải làm khi muốn cung cấp một service từ data model hiện có. Điều này có nghĩa là ứng dụng Silverlight có thể truy cập dữ liệu qua giao thức HTTP để thực hiện truy vấn, và thậm chí để tạo, cập nhật và xóa dữ liệu trong data service, trong cùng domain hoặc cross-domain. Để biết thêm thông tin, xem Consuming OData Feeds QuickStart.
WCF RIA Service sử dụng WCF để cung cấp dữ liệu như là một giải pháp n-tier. RIA Services cung cấp data modeling, validation, concurrency, security và authentication, và service cho phép bạn tạo ra form hiển thị dữ liệu từ một database. Vì RIA Services cung cấp dữ liệu như WCF Services, bạn có thể tận dụng các công cụ cấu hình WCF. Để biết thêm thông tin, xem WCF RIA Services QuickStart.
Silverlight hỗ trợ giao tiếp dựa trên socket với các lớp trong namespace System.Net.Sockets. Các lớp này cung cấp một cơ chế cho giao tiếp thời gian thực hai chiều với các tài nguyên mạng từ xa và cung cấp các API lớp cao hơn để giao tiếp qua tầng Transport. Điều này cũng cho phép ứng dụng tương tác như là một client với TCP services hiện có. Để biết thêm chi tiết, xem Working with Sockets. Ngoài ra, Silverlight 4 hỗ trợ multicast messaging. Multicast messaging cho phép gửi thông điệp đến nhiều người qua kiến trúc one-to-many hoặc many-to-many. Để biết thêm chi tiết, xem Working with Multicast.
Một khi bạn biết yêu cầu của ứng dụng, bạn có thể quyết định cách nào là tốt nhất để sử dụng. Bảng sau đây liệt kê một số tình huống và giải pháp đề nghị.
| Tình huống |
Giải pháp |
| Bạn muốn nhúng dữ liệu chỉ đọc trong assembly. |
Local resource file |
| Bạn muốn cập nhật dữ liệu chỉ đọc mà không cần biên dịch lại. |
Local content file |
| Bạn muốn lưu trữ và lấy thông tin người dùng cụ thể. |
Isolated storage |
| Bạn muốn truy cập dữ liệu từ một REST hoặc POX service của bên thứ ba. |
HTTP classes |
| Bạn muốn truy cập vào một nguồn dữ liệu RSS. |
HTTP classes |
| Bạn muốn truy cập dữ liệu từ SOAP service. |
WCF services, using a proxy class |
| Bạn muốn cung cấp một class như một service để Silverlight sử dụng. |
WCF services |
| Bạn muốn truy cập dữ liệu từ một service cung cấp dữ liệu OData. |
WCF Data Services |
| Bạn muốn tạo một end-to-end business application từ dữ liệu hiện có của bạn. |
WCF RIA Services |
| Bạn muốn truy cập sockets service hiện có hoặc của bên thứ ba để gửi nhận message. |
Sockets |
| Bạn muốn gửi cùng một dữ liệu trên mạng nội bộ đến nhiều khách hàng cùng một lúc. |
Multicast |
Bài viết này được dịch từ: Getting Data Into Silverlight