2009-06-03 34 views

Trả lời

200

Đó là một câu hỏi cực kỳ rộng. Gần đây, công ty của tôi đã viết một bài báo cáo nêu rõ sự khác biệt giữa hai công nghệ và khoảng 70 trang. Thật không may, nó chưa được xuất bản, hoặc tôi sẽ cung cấp cho bạn liên kết.

EDIT: Như đã hứa, đây là liên kết đến whitepaper trên CodePlex:

http://wpfslguidance.codeplex.com/

Tuy nhiên, tôi sẽ cố gắng tóm tắt.

  1. WPF là nền tảng máy khách Windows dày có quyền truy cập vào .Net Framework đầy đủ. Silverlight là một công nghệ dựa trên trình duyệt có quyền truy cập vào một tập con của .Net Framework (được gọi là CoreCLR). Vì vậy, bạn sẽ nhận thấy sự khác biệt bằng cách sử dụng các phương thức và các đối tượng dường như mỗi ngày trong khung công tác. Ví dụ, phương thức Split() trên lớp String có 3 phần ghi đè trong Silverlight, nhưng 6 trong khung .Net. Bạn sẽ thấy sự khác biệt như thế này rất nhiều.

  2. Trong phạm vi WPF, tất cả các phần tử hiển thị trực quan lấy được từ lớp cơ sở Visual. Trong Silverlight, họ không; thay vào đó, chúng xuất phát từ Control. Cả hai công nghệ, tuy nhiên, cuối cùng xuất phát từ lớp DependencyObject lên hệ thống phân cấp.

  3. WPF, hiện tại, có tàu hoặc có sẵn nhiều điều khiển người dùng hơn Silverlight; Mặc dù sự khác biệt này đang được giảm thiểu thông qua Bộ công cụ Silverlight và bản phát hành Silverlight sắp tới 3.

  4. WPF hỗ trợ 3 loại sự kiện định tuyến (trực tiếp, sủi bọt và đường hầm). Silverlight chỉ hỗ trợ trực tiếp và sủi bọt.

  5. Có khá nhiều sự khác biệt về ràng buộc dữ liệu sẽ được giảm nhẹ một chút với phiên bản Silverlight tiếp theo. Hiện tại, Silverlight không hỗ trợ chế độ ràng buộc, OneWayToSource hoặc Explict UpdateSourceTriggers. Ngoài ra, Silverlight mặc định để Databinding OneWay nếu không có được thiết lập, trong khi WPF sử dụng chế độ mặc định được chỉ định bởi thuộc tính dependency.

  6. Silveright không hỗ trợ MultiBinding.

  7. Silverlight hỗ trợ XmlDataProvider nhưng không hỗ trợ ObjectDataProvider. WPF hỗ trợ cả hai.

  8. Silverlight chỉ có thể thực hiện cuộc gọi mạng không đồng bộ. WPF có quyền truy cập vào ngăn xếp mạng Net đầy đủ và có thể thực hiện bất kỳ loại cuộc gọi nào. Ngoài ra, hiện tại, Silverlight hỗ trợ SOAP, nhưng không thể xử lý ngoại lệ lỗi SOAP (điều này có thể thay đổi trong Silverlight 3).

  9. Có sự khác biệt rất lớn về Mật mã (Silverlight có 20 lớp trong không gian tên, trong khi WPF có quyền truy cập 107). Về cơ bản, Silverlight chỉ hỗ trợ 4 thuật toán băm và giao thức mã hóa AES.

  10. Silverlight chưa hỗ trợ: Commanding, Validation, Printing, XPS Documents, Speech, 3D, các đối tượng Freezable, hoặc InterOp với Windows Desktop; tất cả đều có sẵn trong WPF.

  11. Silverlight hỗ trợ tương tác trình duyệt, nhiều tùy chọn phát trực tuyến đa phương tiện bao gồm cả dấu thời gian và Thu phóng sâu. WPF không hỗ trợ các tính năng này.

Điều này hoàn toàn không có nghĩa là tôi đã cố gắng giảm tài liệu dài 70 trang thành dấu đầu dòng.

Cuối cùng, ngay cả với tất cả những khác biệt này, Microsoft đang cố gắng thu hẹp khoảng cách giữa hai công nghệ. Bộ công cụ Silverlight và Bộ công cụ WPF đều giải quyết một số thiếu sót của từng công nghệ. Silverlight 3 sẽ thêm nhiều tính năng hiện không khả dụng (chẳng hạn như ràng buộc dữ liệu phần tử với phần tử). Tuy nhiên, do sự khác biệt trong các thư viện cốt lõi, sẽ luôn có một số khác biệt về khung.

+0

phản hồi tuyệt vời, nhưng tôi không nghĩ rằng Silverlight sẽ hỗ trợ lỗi Lý do là các trình duyệt chặn thông báo HTTP trước khi gửi nó đến plugin của bạn (ví dụ: silverlight). mã lỗi (ví dụ 500), thư không được chuyển tới plugin và bị trình duyệt loại bỏ. Đặc tả SOAP V 1.2 http://www.w3.org/TR/2007/REC-soap12-part0-20070427/ ở phần cuối của phần 4.1.2 nói tóm lại rằng nếu webservice ném một lỗi SOAP, thì Tiêu đề của phản hồi HTTP phải trả về lỗi 500 "Lỗi máy chủ nội bộ". –

+1

Thực ra, có vẻ như Silverlight 3 sẽ bao bọc các ngoại lệ SOAP. Xem tài liệu beta tại http://msdn.microsoft.com/en-us/library/dd470096(VS.96).aspx. – SergioL

+0

Tôi tin rằng số 6 đã lỗi thời - hiện tại Silverlight có hỗ trợ MultiBinding không? – JoeCool

9

WPF là công nghệ máy tính để bàn Windows để phát triển ứng dụng Windows trong khung .Net.

Silverlight là một công nghệ web, được hỗ trợ đầy đủ bởi plugin trình duyệt trên cả Windows và MAC (tương tự như Flash). Ngoài ra còn có một plugin để chạy Silverlight trên Linux (Moonlight).

Trong khi có sự giống nhau giữa chức năng được cung cấp bởi cả WPF và Silverlight (về thành phần giao diện người dùng và hỗ trợ cho XAML) Silverlight là một khung nhỏ, chứa một tập con của chức năng WPF. Phiên bản mới hơn của Silverlight thực sự chứa một số chức năng không được tìm thấy trong WPF, do đó, nó không còn là một tập con thực sự nữa.

+2

Trên thực tế, các tính năng Silverlight không có trong WPF có sẵn thông qua Bộ công cụ WPF và sẽ được bao gồm trong WPF 4 –

+0

Thật không may có vẻ như DeepZoom đã bị 'cắt' từ WPF 4.0, vì vậy đó là một tính năng Silverlight vẫn thiếu :-( http://blogs.msdn.com/jaimer/archive/2009/05/27/wpf-4-and-net-framework-4-beta-1-list-of -features-totrack.aspx – Conceptdev

3

Những thứ mà WPF có là Silverlight không: Công cụ đầy đủ 3D dựa trên DirectX, tích hợp Windows như hình thu nhỏ của thanh tác vụ Windows 7 và khả năng đăng ký hệ thống cũng như quyền truy cập vào Khuôn khổ .NET đầy đủ bao gồm hỗ trợ cơ sở dữ liệu Oracle. Ngoài ra, SL chạy trong một hộp cát an toàn ngăn chặn truy cập vào những thứ như toàn bộ hệ thống tệp nơi các ứng dụng WPF có thể chạy hoàn toàn tin cậy với quyền truy cập hệ thống hoàn chỉnh.

Như đã đề cập ở trên, SL đã đi tiên phong trong một số công nghệ như VisualStateManager đang thực hiện công nghệ thứ hai vào WPF thông qua bộ công cụ WPF được Microsoft hỗ trợ.

Nếu bạn đang tìm cách đánh giá công nghệ nào phù hợp với dự án của bạn, đây là một cách đơn giản để xem nó: Nếu bạn đang viết một ứng dụng có nghĩa là chạy trong khi ngắt kết nối với web hoặc nếu bạn đang viết một ứng dụng cần truy cập vào các tính năng cụ thể của Windows như các tính năng được liệt kê ở trên thì WPF là cách để đi. Đối với các ứng dụng hỗ trợ web không phụ thuộc vào nền tảng, Silverlight là lựa chọn thích hợp. Hth.

1

Bạn có thể nói rằng nó [VERY] gần giống với sự khác biệt giữa Flex và Adobe Air, nhưng điều đó có phần gây hiểu nhầm.

WPF đề cập đến bộ công nghệ (được hiển thị qua API) mà .NET Framework 3.0 và người dùng trên có quyền truy cập để vẽ lên màn hình.

Nhiều API WPF khả dụng cho ứng dụng Silverlight.

Có, tất nhiên nhiều API khác ngoài WPF có sẵn trong Silverlight vì ứng dụng SL sẽ cần phải làm nhiều hơn là chỉ vẽ trên màn hình.

Các vấn đề liên quan