Các bạn hãy đọc nội dung ở đây, sẽ thấy nhiều cái lạ.
http://forum.aspvn.net/tm.aspx?m=22945
Điều này, trong năm qua, tôi đã từng nhiều lần bàn luận với nhiều người bạn.
Bản thân họ, download các soft do các thầy của họ về, nhờ tôi crack dùm source, database. Xem xong cái database & code, họ té ngửa vì bản thân của người thầy mà họ được dạy về Cơ sở dữ liệu, về lập trình không làm theo những gì mình dạy. Và vì sao?
Nhiều lý do đươc đưa ra, nhưng cụ thể là có 2 cái lý do sau nổi bật:
1. Giả sử ta có 2 table là tblHang với thông tin sản phẩm & table tblBanHangCT có thông tin bán hàng
Trên đó, ta lưu thông bán hàng vào.
Đùng 1 cái, ta đổi thông tin của sản phẩm đã bán. Vậy chẳng lẻ mất luôn thông tin cũ sao?
Nhà quản lý yêu cầu sửa thông tin, nhưng vẫn biết được thông tin sản phẩm lúc chưa đổi.
Bạn đặt ra phương án:
a. Sử dụng bảng tạm để lưu vết.
b. Mắc cái gì cho mệt, ta đừng có móc cái quan hệ vào, ràng buộc thì trong đầu ta ngầm định. Lúc đó, tại table BanHangCT, ta đặt thêm các cột lưu thông tin giống như của table tblHang. Vậy khi nào đổi thông tin trên tblHang, các thông tin đã đổi thì cứ đổi, nhưng nó có cái khóa là idHang chẳng hạn, nằm chẹt bẹt trên bảng tblBanHangCT. Vậy, khi đổi kiểu gì, giao tác bán hàng lúc xưa vẫn còn y, thông tin lúc bán vẫn còn.
Điều này dẫn đến việc, ta không có chuẩn 3NF, lại chẳng có cái Relationship nào.
Ô hô, thế mà, đây chính là sự lựa chọn trong các sự chọn lựa tối ưu.
2. Ta phải công bằng mà nhận xét rằng: "trên thế giới, công nghệ nào ra trước phù hợp tại thời điểm đó thì được lấy làm chuẩn. Nhưng, công nghệ càng ngày càng thay đổi với tốc độ của lốc xoáy. Những cái ta biết, ta cho là hợp lý, thì mới ngày sau, ngủ zậy, ĐÙNG... nó là cái cũ, cái bị quên lãng ngay."
Sql ngày xưa, làm gì có cái gọi là Inner join, left jont. Ngày xưa ai đặt ra chuẩn 1NF, 2NF mà lại thêm cái 3NF, BCNF... Cái gì gọi là Sql92 để rồi tùm lum thứ râu ria thêm vào.
Khi nào đó, nếu bạn đã lập trình nhiều, việc phá vỡ qui luật là tất yếu.
Phương pháp không có phá cách chẳng khác nào nghệ thuật không có sáng tạo, cuộc sống không có biến cố & con người không có cảm xúc.
"Lý thuyết không ứng dụng được vào thực tế thì là lý thuyết tối.
Thực tế không có lý thuyết thì thực tế mù"
Bạn muốn sử dụng lý thuyết tối hay thực tế mù? 2 mặt của vấn đề...!!!
Bài đăng Phổ biến
-
Bài 1 GIỚI THIỆU TỔNG QUAN VỀ WINDOWS COMMUNICATION FOUNDATION 1. Mục lục 2. Windows Communication Foundation (WCF) là gì? 3. Tại s...
-
Mục lục Bài 1: Sử dụng LINQ to SQL 1. LINQ to SQL là gì? 2. Mô hình hóa CSDL dùng LINQ to SQL: 3. Tìm hiểu lớp DataContext 4. Cá...
-
Từ lâu, chúng ta đã biết về generation code (gencode) qua nhiều ngôn ngữ lập trình như VB, VB.NET, C#, Java... đến cả các hệ quản trị cơ sở ...
-
Mô hình 3 lớp (3 layers) – n-tiers , 3-tiers, multi tiers Trong bài viết này không có tham vọng trình bày lại chi tiết mô hình thiết...
-
1 Mô hình lập trình WCF 1.1 Sử dụng phương pháp hướng đối tượng hay hướng dịch vụ? Nếu các bạn đã học qua môn học về các phương pháp ...
-
1)Windows Communication Foundation (WCF) là gì? WCF là công nghệ nền tảng nhằm thống nhất nhiều mô hình lập trình giao tiếp được hỗ trợ...
-
http://www.4shared.com/file/R6y0J7aY/ApressProASPNET4CMSAdvancedTec.htm theo: http://khotien.vn/
-
2.1 Cài đặt WCF 2.1.1 .NET Framework 3.5 SP1: Để xây dựng một dịch vụ WCF, đầu tiên bạn cần phải cài đặt .NET Framework 3.5 SP1. Thực r...
-
2.2.3 Tạo ứng dụng phía client 1. Mở console dòng lệnh và chuyển tới thư mục bạn muốn tạo các tệp, gõ vào lệnh sau và bấm Enter: Svcutil.e...
-
Các bạn hãy đọc nội dung ở đây, sẽ thấy nhiều cái lạ. http://forum.aspvn.net/tm.aspx?m=22945 Điều này, trong năm qua, tôi đã từng nhiều l...
Thứ Bảy, 12 tháng 2, 2011
CMS (Part 1)
CMS = Content Management System.
Là hệ thống dùng để tạo ra, thay đổi, lưu trữ, xóa, các thông tin , tài nguyên dựa trên một hệ thống lưu trữ được tổ chức tốt.
Ngoài ra nó còn bao gồm các công cụ giúp cho việc tìm kiếm, quản lý phiên bản và phát hành thông tin, định dạng thông tin một cách nhanh chóng và dễ dàng.
Thông tin ở đây có thể là thông tin có cấu trúc (được lưu trong CSDL), hoặc thông tin không cấu trúc như các file media, file văn bản....
Các tờ báo điện tử hiện nay là một loại CMS, các cổng thông tin điện tử của chính phủ hiện cũng là CMS.
Hãy tưởng tượng một tờ báo điện tử, phóng viên sẽ tạo một bài báo và được hệ thống quản lý. Bài báo này sẽ được chuyển tới người biên tập để chỉnh sữa, thay đổi ( tuy nhiên phiên bản gốc vẫn được bảo lưu ). Có thể có nhiều biên tập viên tham gia vào thay đổi bài viết này. Tất cả các thay đổi đều được ghi nhận và bảo lưu. Sau đó, bài viết này sẽ được chuyển tới tổng biên tập, ông này duyệt và ra lệnh xuất lên web, bài báo này sẽ tự động xuất hiện trên web và tự động mất đi sau một thời gian định trước.
Điều quan trọng là người biên tập này không cần phải biết HTML để có thể đưa bài báo đó lên web, hệ thống sẽ tự động trình bày và để bài báo đó vào đúng mục thích hợp.
Ở mức độ phức tạp hơn, đối với các cổng thông tin của chíh phủ, tài liệu không chỉ là các bài viết, nó có thể là công văn, là giấy tờ, quyền sử dụng đất, giấy đăng ký kết hôn, các văn bản pháp luật,..... Người truy cập có thể là các bộ ngành, có thể là người dân, các công ty,... hệ thống sẽ quản lý tất cả và cung cấp đúng thông tin cho đúng người, đúng thời gian với các định dạng, trình bày thích hợp nhất.
Có rất nhiều hệ thống CMS trên thế giới.
Một số dạng phổ thông và đơn giản có thể kể là
Mambo, Joomla, Nuke, ...
Phức tạp hơn 1 xíu thì có Typo3, ezpublish,...
Tất cả những hệ thống kể trên đều là mã nguồn mỡ.
Các hệ thống lớn hơn thì phải bỏ tiền ra rất nhiều.
Để duy trì một trang CMS cần ít nhất 2 team.
1. team lo về content, team này không biết tí gì về kỹ thuật, chỉ lo content và các vấn đề về publish content.
2. team lo về tech, team này giúp hệ thống thông minh hơn, lư trữ được nhiều loại content hơn, trình bày thông minh hơn, đẹp hơn và chạy nhanh hơn.
CMS la xu hướng chung của tất cả các website ngày nay.
Sự phát triển của CMS báo hiệu ngày tàn của các nhà lập trình web, bởi vì đã có rất nhiều hệ thống thông minh, bạn không cần phải biết lập trình web để có thể sở hữu một trang web.
Ví dụ đơn giản nhất là 02HCB forum. Nó sử dụng một hệ thống CMS thuộc loại forum và bạn không phải biết quá nhiều về web để có thể cài đặt và duy trì các diễn đàn.
Blogger, là một dạng CMS, Wiki là một dạng CMS....
CMS trong tương lai sẽ được tích hợp vào các hệ thống ERP của doanh nghiệp. Các dữ liệu của doanh nghiệp sẽ được publish trực tiếp lên website mà không cần phải tốn nhiều công sức. Ví dụ một nhà máy, họ vừa sản xuất ra một sản phẩm, sản phẩm này lập tức xuất hiện trên trang web về thương mại điện tử của nhà máy đó, thông tin về sản phẩm sẽ được lấy từ dữ liệu của phòng kỹ thuật, giá cả thì lấy từ phòng kinh doanh, các phương thức khuyến mãi lại được truy cập trực tiếp từ phòng marketing. Các báo cáo thuế của doanh nghiệp sẽ được xuất bản và gửi trực tiếp về phòng thuế....
Một hệ thống CMS là một hệ thống quản lý mọi thứ, bời vì tất cả đều là content. Cái hay của một hệ thống là làm sao tổ chức và quản lý được những content phi cấu trúc và quản lý được nhiều loại thông tin.
IDG trong những năm vừa rồi có đề ra một concept mới gọi là EW (Enterprise Workspace / Enterprise Workplace) đây là một hệ thống tích hợp mọi công cụ cho doanh nghiệp, bao gồm ERP, CRM, CMS,...
Doanh nghiệp sẽ có một công cụ quản lý hết mọi hoạt động của mình. Đây là những hệ thống rất lớn, tuy nhiên lại rất triệt để.
Là hệ thống dùng để tạo ra, thay đổi, lưu trữ, xóa, các thông tin , tài nguyên dựa trên một hệ thống lưu trữ được tổ chức tốt.
Ngoài ra nó còn bao gồm các công cụ giúp cho việc tìm kiếm, quản lý phiên bản và phát hành thông tin, định dạng thông tin một cách nhanh chóng và dễ dàng.
Thông tin ở đây có thể là thông tin có cấu trúc (được lưu trong CSDL), hoặc thông tin không cấu trúc như các file media, file văn bản....
Các tờ báo điện tử hiện nay là một loại CMS, các cổng thông tin điện tử của chính phủ hiện cũng là CMS.
Hãy tưởng tượng một tờ báo điện tử, phóng viên sẽ tạo một bài báo và được hệ thống quản lý. Bài báo này sẽ được chuyển tới người biên tập để chỉnh sữa, thay đổi ( tuy nhiên phiên bản gốc vẫn được bảo lưu ). Có thể có nhiều biên tập viên tham gia vào thay đổi bài viết này. Tất cả các thay đổi đều được ghi nhận và bảo lưu. Sau đó, bài viết này sẽ được chuyển tới tổng biên tập, ông này duyệt và ra lệnh xuất lên web, bài báo này sẽ tự động xuất hiện trên web và tự động mất đi sau một thời gian định trước.
Điều quan trọng là người biên tập này không cần phải biết HTML để có thể đưa bài báo đó lên web, hệ thống sẽ tự động trình bày và để bài báo đó vào đúng mục thích hợp.
Ở mức độ phức tạp hơn, đối với các cổng thông tin của chíh phủ, tài liệu không chỉ là các bài viết, nó có thể là công văn, là giấy tờ, quyền sử dụng đất, giấy đăng ký kết hôn, các văn bản pháp luật,..... Người truy cập có thể là các bộ ngành, có thể là người dân, các công ty,... hệ thống sẽ quản lý tất cả và cung cấp đúng thông tin cho đúng người, đúng thời gian với các định dạng, trình bày thích hợp nhất.
Có rất nhiều hệ thống CMS trên thế giới.
Một số dạng phổ thông và đơn giản có thể kể là
Mambo, Joomla, Nuke, ...
Phức tạp hơn 1 xíu thì có Typo3, ezpublish,...
Tất cả những hệ thống kể trên đều là mã nguồn mỡ.
Các hệ thống lớn hơn thì phải bỏ tiền ra rất nhiều.
Để duy trì một trang CMS cần ít nhất 2 team.
1. team lo về content, team này không biết tí gì về kỹ thuật, chỉ lo content và các vấn đề về publish content.
2. team lo về tech, team này giúp hệ thống thông minh hơn, lư trữ được nhiều loại content hơn, trình bày thông minh hơn, đẹp hơn và chạy nhanh hơn.
CMS la xu hướng chung của tất cả các website ngày nay.
Sự phát triển của CMS báo hiệu ngày tàn của các nhà lập trình web, bởi vì đã có rất nhiều hệ thống thông minh, bạn không cần phải biết lập trình web để có thể sở hữu một trang web.
Ví dụ đơn giản nhất là 02HCB forum. Nó sử dụng một hệ thống CMS thuộc loại forum và bạn không phải biết quá nhiều về web để có thể cài đặt và duy trì các diễn đàn.
Blogger, là một dạng CMS, Wiki là một dạng CMS....
CMS trong tương lai sẽ được tích hợp vào các hệ thống ERP của doanh nghiệp. Các dữ liệu của doanh nghiệp sẽ được publish trực tiếp lên website mà không cần phải tốn nhiều công sức. Ví dụ một nhà máy, họ vừa sản xuất ra một sản phẩm, sản phẩm này lập tức xuất hiện trên trang web về thương mại điện tử của nhà máy đó, thông tin về sản phẩm sẽ được lấy từ dữ liệu của phòng kỹ thuật, giá cả thì lấy từ phòng kinh doanh, các phương thức khuyến mãi lại được truy cập trực tiếp từ phòng marketing. Các báo cáo thuế của doanh nghiệp sẽ được xuất bản và gửi trực tiếp về phòng thuế....
Một hệ thống CMS là một hệ thống quản lý mọi thứ, bời vì tất cả đều là content. Cái hay của một hệ thống là làm sao tổ chức và quản lý được những content phi cấu trúc và quản lý được nhiều loại thông tin.
IDG trong những năm vừa rồi có đề ra một concept mới gọi là EW (Enterprise Workspace / Enterprise Workplace) đây là một hệ thống tích hợp mọi công cụ cho doanh nghiệp, bao gồm ERP, CRM, CMS,...
Doanh nghiệp sẽ có một công cụ quản lý hết mọi hoạt động của mình. Đây là những hệ thống rất lớn, tuy nhiên lại rất triệt để.
CMS & MCV NET 4.0 - Ebook
http://www.4shared.com/file/R6y0J7aY/ApressProASPNET4CMSAdvancedTec.htm
theo: http://khotien.vn/
theo: http://khotien.vn/
LINQ - Ebook
Mục lục
Bài 1: Sử dụng LINQ to SQL
1. LINQ to SQL là gì?
2. Mô hình hóa CSDL dùng LINQ to SQL:
3. Tìm hiểu lớp DataContext
4. Các ví dụ LINQ to SQL
a. Lấy các Product từ CSDL
b. Cập nhật một sản phẩm trong CSDL
c. Chèn thêm một phân loại mới và hai sản phẩm vào CSDL
d. Xóa các sản phẩm
e. Gọi một thủ tục
f. Lấy các sản phẩm và phân trang
5. Tổng kết
Bài 2: Định nghĩa các lớp mô hình dữ liệu
1. Tạo ra một mô hình dữ liệu LINQ to SQL
2. Các lớp thực thể
3. Tạo các lớp thực thể từ CSDL
4. Cách đặt tên và ngữ pháp số nhiều
5. Quan hệ giữa các thực thể
6. Delay/Lazy Loading
7. Dùng các Stored Procedure
Dùng SPROCS để cập nhật/xóa,thêm dữ liệu
8. Tổng kết
Bài 3: Truy vấn Cơ sở dữ liệu
1. Mô hình hóa CSDL Northwind dùng LINQ to SQL
2. Lấy các sản phẩm
3. Trực quan hóa các câu truy vấn LINQ to SQL trong trình gỡ lỗi
4. Gắn nối các câu truy vấn LINQ to SQL vào các control LINQ to SQL
5. Data Sharping
6. Phân trang kết quả truy vấn
7. Tổng kết
Bài 4: Cập nhật cơ sở dữ liệu
1. CSDL Northwind được mô hình hóa dùng LINQ to SQL
Change Tracking và DataContext.SubmitChanges()
2. Các ví dụ Insert và Delete
a. Thêm một sản phẩm
b. Xóa các sản phẩm
3. Cập nhật thông qua các quan hệ
4. Transactions
5. Kiểm tra dữ liệu và Business Logic
6. Hỗ trợ kiểm tra các giá trị thuộc tính dựa trên schema của CSDL
7. Hỗ trợ tùy biến việc kiểm tra giá trị các thuộc tính
8. Hỗ trợ tùy biến việc kiểm tra tính hợp lệ của thực thể
9. Tùy biến các phương thức kiểm tra việc thêm/xóa/sửa dữ liệu
10. Nâng cao: Xem danh sách thay đổi cho Transaction
11. Xử lý các thay đổi đồng thời với Optimistic Concurrency:
12. Dùng SPROCs hoặc tùy biến logic các câu SQL:
Bài 5: Sử dụng asp:LinqDataSource
1. Ứng dụng mẫu mà chúng ta sẽ xây dựng:
2. <asp:LinqDataSource> là gì và nó giúp gì cho chúng ta?
Bước 1: Định nghĩa mô hình dữ liệu
Bước 2: Tạo danh sách sản phẩm
Bước 3: Bỏ các cột không cần thiết
Bước 4: Lọc danh sách sản phẩm
Bước 5: Thêm các quy tắc kiểm tra logic
3. Tổng kết
Bài 6: Lấy dữ liệu dùng Stored Procedure
1. Dùng SPROC hay không SPROC? Đó là một vấn đề….
2. Các bước ánh xạ và gọi SPROC dùng LINQ to SQL
3. Cách ánh xạ một SPROC vào một DataContext của LINQ
4. Cách gọi SPROC mới được tạo
5. Ánh xạ kiểu trả về của phương thức SPROC vào một lớp trong mô hình dữ liệu
6. Xử lý các tham số thủ tục dạng OUTPUT
7. Xử lý các thủ tục trả về nhiều kiểu kết quả khác nhau
Hỗ trợ các hàm do người dùng tự định nghĩa (UDF)
8. Tổng kết
Bài 7: Cập nhật dữ liệu dùng Stored Procedure
9. Bước 1: Tạo lớp truy xuất dữ liệu (chưa dùng đến các thủ tục)
Thêm các quy tắc kiểm tra dữ liệu vào các lớp mô hình dữ liệu
Thêm phương thức GetCustomer() vào lớp DataContext LINQ to SQL Tutorial
10. Bước 2: Dùng lớp truy cập dữ liệu (chưa sử dụng SPROC)
11. Chờ một giây - Tôi nghĩ bài viết này định nói về việc dùng SPROC cơ mà ???
12. Cách sử dụng SPROC để thực hiện Insert/Update/Delete
13. Bước 3: Thêm một Order bằng cách dùng SPROC
14. Bước 4: Thực hiện cập nhật dùng SPROC
15. Bước 5: Dùng lớp DAL lần nữa
16. Một số ưu điểm của việc dùng SPROC
Dùng các tham số dạng output:
Sẽ thế nào nếu một SPROC phát ra một lỗi?
Tôi có thể viết code thay vì dung ORM designer để gọi SPROC?
7. Tổng kết
Bài 8: Thực thi các biểu thức SQL tùy biến
1. Dùng các câu truy vấn SQL tùy biến với LINQ to SQL
2. Dùng ExecuteQuery
3. Tùy biến các biểu thức SQL và theo vết (tracking) các thao tác cập nhật:
4. Tùy biến các biểu thức SQL với các lớp của bạn
5. Tùy biến các câu SQL cho Inserts/Updates/Deletes
6. Tổng kết
Bài 9: Dùng biểu thức LINQ tùy biến với <asp:LinqDatasource>
1. Tóm tắt: dùng <asp:LinqDataSource> với một mệnh đề where được khai báo
2. Dùng các sự kiện Selecting với <asp:LinqDataSource>
3. Thực hiện các phép chiếu khi truy vấn với sự kiện Selecting
4. Tổng kết
http://www.mediafire.com/?jmei14njltm
nganhangweb.net
WCF - Ebook
Bài 1
GIỚI THIỆU TỔNG QUAN VỀ
WINDOWS COMMUNICATION FOUNDATION
1. Mục lục
2. Windows Communication Foundation (WCF) là gì?
3. Tại sao sử dụng WCF?
4. Kiến trúc của WCF
4.1 Các contracts (Các hiệp nghị)
4.2 Runtime service (Dịch vụ thực thi)
4.3 Message (Bản tin)
4.4 Host and activation (Chứa và kích hoạt)
5. Các tính năng của WCF
5.1 Transaction (Giao dịch)
5.2 Host (Chứa)
5.3 Bảo mật
6. Công cụ phát triển với WCF
7. Ví dụ đầu tiên với WCF
8. Sử dụng công cụ WCF Test Client để debug dịch vụ WCF
9. Tài liệu tham khảo
Bài 2
MÔ HÌNH LẬP TRÌNH VỚI
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Mô hình lập trình WCF
1.1 Sử dụng phương pháp hướng đối tượng hay hướng dịch vụ?
1.2 Service Model (Mô hình dịch vụ)
1.3 Các phương pháp lập trình với WCF
1.3.1 Declarative programming (Phương pháp khai báo)
1.3.2 Explicit programming (Phương pháp lập trình trực tiếp)
1.3.3 Phương pháp sử dụng tập tin cấu hình
2 Xây dựng một dịch vụ WCF
2.1 Cài đặt WCF
2.1.1 .NET Framework 3.5 SP1
2.1.2 Visual Studio 2008 SP1
2.2 Tạo dịch vụ WCF đầu tiên của bạn
2.2.1 Tạo ứng dụng phía server
2.2.2 Phát hành thông tin về dịch vụ
2.2.3 Tạo ứng dụng phía client
2.3 Cách khác để tạo tham chiếu ở client
3 Câu hỏi ôn tập
4 Tài liệu tham khảo
Bài 3
ADDRESSES (ĐỊA CHỈ) VÀ BINDINGS
Mục lục
1 Địa chỉ trong Windows Communication Foundation
1.1 Các kiểu địa chỉ
1.1.1 Địa chỉ điểm cuối
1.1.2 Địa chỉ cơ sở
1.1.3 Địa chỉ MEX
1.2 Các định dạng địa chỉ
1.2.1 Địa chỉ HTTP
1.2.2 Địa chỉ HTTPS
1.2.3 Địa chỉ TCP
1.2.4 Địa chỉ MSMQ
1.2.5 Địa chỉ Ống đặt tên (Named Pipe)
1.2.6 Địa chỉ IIS
2 Lập trình với địa chỉ trong Windows Communication Foundation
2.1 Lớp EndpointAddress
2.1.1 Lớp EndpointIdentity
2.1.2 Tập hợp các đầu đề
2.2 Lập trình các địa chỉ
2.2.1 Lập trình các địa chỉ cơ sở
2.2.2 Lập trình địa chỉ điểm cuối
3 Giới thiệu về Bindings trong Windows Communication Foundation
4 Lập trình các Bindings
5 Câu hỏi ôn tập
6 Tài liệu tham khảo
Bài 4
CONTRACTS TRONG
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Contracts trong Windows Communication Foundation
1.1 Service Contracts
1.1.1 Thuộc tính ServiceContract
1.1.2 Thuộc tính OperationContract
1.2 Data Contracts
1.2.1 Thuộc tính DataContract
1.3 Message Contracts
1.3.1 Thuộc tính MessageContract
1.3.2 Thuộc tính MessageHeader
1.3.3 Thuộc tính MessageBodyMember
2 Lập trình với các contracts trong Windows Communication Foundation
3 Câu hỏi ôn tập
4 Tài liệu tham khảo
Bài 5
CLIENTS TRONG
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Kiến trúc của client trong Windows Communication Foundation
1.1 Các đối tượng phía client
1.1.1 ICommunicationObject
1.1.2 IExtensibleObject
1.2 Các kênh client
1.2.1 IClientChannel
1.2.2 IContextChannel
1.3 Các Channel Factory
1.3.1 Constructor (Cấu tử) của ChannelFactory
1.3.2 Các thuộc tính của ChannelFactory
1.3.3 Các phương thức của ChannelFactory
2 Các cách liên lạc của client
2.1 Một chiều (One-Way)
2.2 Yêu cầu-Trả lời (Request-Reply
2.3 Song công (Duplex)
2.3.1 Phía dịch vụ
2.3.2 Phía client
2.4 Dị bộ (Asynchronous
2.4.1 Phía dịch vụ
2.4.2 Phía client
3 Câu hỏi ôn tập
4 Tài liệu tham khảo
Bài 6
SERVICES TRONG
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Tổng quan
1.1 Các kiểu dịch vụ
1.1.1 Typed Service (Định kiểu)
1.1.2 Untyped service (Không định kiểu)
1.1.3 Typed message service (Bản tin định kiểu)
1.2 Các contract dịch vụ
1.3 Service Endpoints (Các điểm cuối dịch vụ)
1.3.1 Định nghĩa điểm cuối bằng mã nguồn
1.3.2 Định nghĩa điểm cuối bằng tệp tin cấu hình
2 Các phép hành xử dịch vụ (Service behaviors)
2.1 Lớp thuộc tính ServiceBehavior
2.2 Lớp thuộc tính OperationBehavior
3 Xử lý lỗi
3.1 Ví dụ xử lý lỗi sử dụng FaultContract
4 Câu hỏi ôn tập
5 Tài liệu tham khảo
Bài 7
SECURITY TRONG
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Tổng quan về bảo mật
1.1 Ích lợi từ bảo mật trong WCF
1.1.1 Tích hợp với các kiến trúc bảo mật có sẵn
1.1.2 Tích hợp với mô hình xác thực có sẵn
1.1.3 Các chuẩn và tính interoperability (làm việc liên môi trường)
1.2 Các lĩnh vực bảo mật của WCF
1.2.1 Transfer security
1.2.2 Các chế độ bảo mật vận chuyển và bản tin
1.2.3 Điều khiển truy nhập
1.2.4 Auditing
2 Lập trình với bảo mật trong WCF
2.1 Đặt chế độ bảo mật
2.2 Chọn kiểu xác thực client
2.3 Thiết lập các giá trị credentials cho dịch vụ
2.4 Thiết lập các giá trị credentials cho client
3 Xây dựng ví dụ với bảo mật trong WCF
3.1 Tạo dịch vụ WCF
3.2 Thêm chức năng cho dịch vụ
3.3 Thiết lập dịch vụ WCF sử dụng wsHttpBinding với Windows Authentication và Message
Security
3.4 Tạo ứng dụng client
3.5 Thêm tham chiếu tới dịch vụ WCF cho client
3.6 Thêm chức năng cho client
4 Câu hỏi ôn tập
5 Tài liệu tham khảo
Bài 8
MỘT SỐ VÍ DỤ SỬ DỤNG WINDOWS
COMMUNICATION FOUNDATION
Mục lục
1 Tạo dịch vụ WCF hỗ trợ làm việc với AJAX
1.1 Tạo ứng dụng web để quản lý nhân viên
1.2 Tạo dịch vụ quản lý nhân viên
1.3 Thiết lập cấu hình để hỗ trợ AJAX
1.4 Sử dụng các phương thức của dịch vụ WCF bằng AJAX
2 Tạo dịch vụ WCF làm việc với REST
2.1 Xây dựng URI Template cho việc lấy dữ liệu (HTTP GET)
2.2 Xây dựng URI Template cho việc cập nhật dữ liệu (HTTP PUT)
2.3 Xây dựng URI Template để xoá một nhân viên (HTTP DELETE
3 Tài liệu tham khảo
http://www.mediafire.com/?3fbz1hmq2oh
nganhangweb.net
GIỚI THIỆU TỔNG QUAN VỀ
WINDOWS COMMUNICATION FOUNDATION
1. Mục lục
2. Windows Communication Foundation (WCF) là gì?
3. Tại sao sử dụng WCF?
4. Kiến trúc của WCF
4.1 Các contracts (Các hiệp nghị)
4.2 Runtime service (Dịch vụ thực thi)
4.3 Message (Bản tin)
4.4 Host and activation (Chứa và kích hoạt)
5. Các tính năng của WCF
5.1 Transaction (Giao dịch)
5.2 Host (Chứa)
5.3 Bảo mật
6. Công cụ phát triển với WCF
7. Ví dụ đầu tiên với WCF
8. Sử dụng công cụ WCF Test Client để debug dịch vụ WCF
9. Tài liệu tham khảo
Bài 2
MÔ HÌNH LẬP TRÌNH VỚI
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Mô hình lập trình WCF
1.1 Sử dụng phương pháp hướng đối tượng hay hướng dịch vụ?
1.2 Service Model (Mô hình dịch vụ)
1.3 Các phương pháp lập trình với WCF
1.3.1 Declarative programming (Phương pháp khai báo)
1.3.2 Explicit programming (Phương pháp lập trình trực tiếp)
1.3.3 Phương pháp sử dụng tập tin cấu hình
2 Xây dựng một dịch vụ WCF
2.1 Cài đặt WCF
2.1.1 .NET Framework 3.5 SP1
2.1.2 Visual Studio 2008 SP1
2.2 Tạo dịch vụ WCF đầu tiên của bạn
2.2.1 Tạo ứng dụng phía server
2.2.2 Phát hành thông tin về dịch vụ
2.2.3 Tạo ứng dụng phía client
2.3 Cách khác để tạo tham chiếu ở client
3 Câu hỏi ôn tập
4 Tài liệu tham khảo
Bài 3
ADDRESSES (ĐỊA CHỈ) VÀ BINDINGS
Mục lục
1 Địa chỉ trong Windows Communication Foundation
1.1 Các kiểu địa chỉ
1.1.1 Địa chỉ điểm cuối
1.1.2 Địa chỉ cơ sở
1.1.3 Địa chỉ MEX
1.2 Các định dạng địa chỉ
1.2.1 Địa chỉ HTTP
1.2.2 Địa chỉ HTTPS
1.2.3 Địa chỉ TCP
1.2.4 Địa chỉ MSMQ
1.2.5 Địa chỉ Ống đặt tên (Named Pipe)
1.2.6 Địa chỉ IIS
2 Lập trình với địa chỉ trong Windows Communication Foundation
2.1 Lớp EndpointAddress
2.1.1 Lớp EndpointIdentity
2.1.2 Tập hợp các đầu đề
2.2 Lập trình các địa chỉ
2.2.1 Lập trình các địa chỉ cơ sở
2.2.2 Lập trình địa chỉ điểm cuối
3 Giới thiệu về Bindings trong Windows Communication Foundation
4 Lập trình các Bindings
5 Câu hỏi ôn tập
6 Tài liệu tham khảo
Bài 4
CONTRACTS TRONG
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Contracts trong Windows Communication Foundation
1.1 Service Contracts
1.1.1 Thuộc tính ServiceContract
1.1.2 Thuộc tính OperationContract
1.2 Data Contracts
1.2.1 Thuộc tính DataContract
1.3 Message Contracts
1.3.1 Thuộc tính MessageContract
1.3.2 Thuộc tính MessageHeader
1.3.3 Thuộc tính MessageBodyMember
2 Lập trình với các contracts trong Windows Communication Foundation
3 Câu hỏi ôn tập
4 Tài liệu tham khảo
Bài 5
CLIENTS TRONG
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Kiến trúc của client trong Windows Communication Foundation
1.1 Các đối tượng phía client
1.1.1 ICommunicationObject
1.1.2 IExtensibleObject
1.2 Các kênh client
1.2.1 IClientChannel
1.2.2 IContextChannel
1.3 Các Channel Factory
1.3.1 Constructor (Cấu tử) của ChannelFactory
1.3.2 Các thuộc tính của ChannelFactory
1.3.3 Các phương thức của ChannelFactory
2 Các cách liên lạc của client
2.1 Một chiều (One-Way)
2.2 Yêu cầu-Trả lời (Request-Reply
2.3 Song công (Duplex)
2.3.1 Phía dịch vụ
2.3.2 Phía client
2.4 Dị bộ (Asynchronous
2.4.1 Phía dịch vụ
2.4.2 Phía client
3 Câu hỏi ôn tập
4 Tài liệu tham khảo
Bài 6
SERVICES TRONG
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Tổng quan
1.1 Các kiểu dịch vụ
1.1.1 Typed Service (Định kiểu)
1.1.2 Untyped service (Không định kiểu)
1.1.3 Typed message service (Bản tin định kiểu)
1.2 Các contract dịch vụ
1.3 Service Endpoints (Các điểm cuối dịch vụ)
1.3.1 Định nghĩa điểm cuối bằng mã nguồn
1.3.2 Định nghĩa điểm cuối bằng tệp tin cấu hình
2 Các phép hành xử dịch vụ (Service behaviors)
2.1 Lớp thuộc tính ServiceBehavior
2.2 Lớp thuộc tính OperationBehavior
3 Xử lý lỗi
3.1 Ví dụ xử lý lỗi sử dụng FaultContract
4 Câu hỏi ôn tập
5 Tài liệu tham khảo
Bài 7
SECURITY TRONG
WINDOWS COMMUNICATION FOUNDATION
Mục lục
1 Tổng quan về bảo mật
1.1 Ích lợi từ bảo mật trong WCF
1.1.1 Tích hợp với các kiến trúc bảo mật có sẵn
1.1.2 Tích hợp với mô hình xác thực có sẵn
1.1.3 Các chuẩn và tính interoperability (làm việc liên môi trường)
1.2 Các lĩnh vực bảo mật của WCF
1.2.1 Transfer security
1.2.2 Các chế độ bảo mật vận chuyển và bản tin
1.2.3 Điều khiển truy nhập
1.2.4 Auditing
2 Lập trình với bảo mật trong WCF
2.1 Đặt chế độ bảo mật
2.2 Chọn kiểu xác thực client
2.3 Thiết lập các giá trị credentials cho dịch vụ
2.4 Thiết lập các giá trị credentials cho client
3 Xây dựng ví dụ với bảo mật trong WCF
3.1 Tạo dịch vụ WCF
3.2 Thêm chức năng cho dịch vụ
3.3 Thiết lập dịch vụ WCF sử dụng wsHttpBinding với Windows Authentication và Message
Security
3.4 Tạo ứng dụng client
3.5 Thêm tham chiếu tới dịch vụ WCF cho client
3.6 Thêm chức năng cho client
4 Câu hỏi ôn tập
5 Tài liệu tham khảo
Bài 8
MỘT SỐ VÍ DỤ SỬ DỤNG WINDOWS
COMMUNICATION FOUNDATION
Mục lục
1 Tạo dịch vụ WCF hỗ trợ làm việc với AJAX
1.1 Tạo ứng dụng web để quản lý nhân viên
1.2 Tạo dịch vụ quản lý nhân viên
1.3 Thiết lập cấu hình để hỗ trợ AJAX
1.4 Sử dụng các phương thức của dịch vụ WCF bằng AJAX
2 Tạo dịch vụ WCF làm việc với REST
2.1 Xây dựng URI Template cho việc lấy dữ liệu (HTTP GET)
2.2 Xây dựng URI Template cho việc cập nhật dữ liệu (HTTP PUT)
2.3 Xây dựng URI Template để xoá một nhân viên (HTTP DELETE
3 Tài liệu tham khảo
http://www.mediafire.com/?3fbz1hmq2oh
nganhangweb.net
WCF (part 4)
2.2.3 Tạo ứng dụng phía client
1. Mở console dòng lệnh và chuyển tới thư mục bạn muốn tạo các tệp, gõ vào lệnh sau và bấm Enter:
Svcutil.exe http://localhost:8000/StaffService?wsdl
Bạn sẽ thấy kết quả sau:
2. Tạo ra một console project mới đặt tên là StaffClient và thêm tham chiếu tới System.ServiceModel. Thêm vào tệp vừa tạo ra là Staff.cs, đồng thời đổi tên tệp cấu hình thành app.config và thêm vào project. Kết quả như sau:
3. Sau khi biên dịch và chạy chương trình bạn được kết quả sau:
2.3 Cách khác để tạo tham chiếu ở client
Ngoài cách thực hiện bằng dòng lệnh như ở trên, ta hoàn toàn có thể sử dụng sự giúp đỡ của công cụ Visual Studio để tạo ra tham chiếu dịch vụ phía client. Cách này thực hiện rất nhanh và rất tiện lợi. Cách làm như sau:
Bước 1. Chọn chuột phải vào project cần thêm tham chiếu, ở đây là StaffClient, sau đó chọn menu là Add Service Reference như hình sau:
Bước 2. Gõ vào địa chỉ của dịch vụ cần thêm, sau đó bấm nút Go, phía dưới đặt tên cho tham chiếu dịch vụ là StaffService như hình dưới.
Tài liệu tham khảo
1. Programming your first WCF service (URL: http://www.myitblog.com/sundararajan/programming-your-first-wcf-service.html)
2. Your first WCF Service (URL: http://eng.ahmedelmalt.googlepages.com/wcf02.htm)
1. Mở console dòng lệnh và chuyển tới thư mục bạn muốn tạo các tệp, gõ vào lệnh sau và bấm Enter:
Svcutil.exe http://localhost:8000/StaffService?wsdl
Bạn sẽ thấy kết quả sau:
2. Tạo ra một console project mới đặt tên là StaffClient và thêm tham chiếu tới System.ServiceModel. Thêm vào tệp vừa tạo ra là Staff.cs, đồng thời đổi tên tệp cấu hình thành app.config và thêm vào project. Kết quả như sau:
3. Sau khi biên dịch và chạy chương trình bạn được kết quả sau:
2.3 Cách khác để tạo tham chiếu ở client
Ngoài cách thực hiện bằng dòng lệnh như ở trên, ta hoàn toàn có thể sử dụng sự giúp đỡ của công cụ Visual Studio để tạo ra tham chiếu dịch vụ phía client. Cách này thực hiện rất nhanh và rất tiện lợi. Cách làm như sau:
Bước 1. Chọn chuột phải vào project cần thêm tham chiếu, ở đây là StaffClient, sau đó chọn menu là Add Service Reference như hình sau:
Bước 2. Gõ vào địa chỉ của dịch vụ cần thêm, sau đó bấm nút Go, phía dưới đặt tên cho tham chiếu dịch vụ là StaffService như hình dưới.
Tài liệu tham khảo
1. Programming your first WCF service (URL: http://www.myitblog.com/sundararajan/programming-your-first-wcf-service.html)
2. Your first WCF Service (URL: http://eng.ahmedelmalt.googlepages.com/wcf02.htm)
WCF (part 3)
2.1 Cài đặt WCF
2.1.1 .NET Framework 3.5 SP1:
Bạn có thể hình dung ứng dụng chúng ta sẽ xây dựng như sau. Công ty Contoso cần xây dựng một hệ thống quản lý các nhân viên của công ty. Ban đầu, chúng ta cần phải xây dựng một ứng dụng ở server
Bước 1. Tạo ứng dụng
1. Mở Visual Studio 2008, chọn tạo mới C# Console Project đặt tên là StaffService, xem Figure 1
Bước 2. Tạo contract dịch vụ
1. Định nghĩa giao diện sẽ được sử dụng như là contract cho ứng dụng của chúng ta, thêm vào thuộc tính ServiceContract cho giao diện đó
2. Định nghĩa 2 hàm như đoạn mã nguồn sau, các hàm này đóng vai trò là các contract operations miêu tả chức năng của dịch vụ
1. Định nghĩa lớp Staff để cài đặt giao diện IStaff
2. Thực hiện cài đặt cho 2 hàm được định nghĩa trong giao diện IStaff
1. Thêm đoạn mã nguồn sau vào hàm main
ServiceHost sh = new ServiceHost(typeof(Staff));
try
{
sh.Open();
Console.WriteLine("Staff Service opened successfully");
Console.WriteLine("Press Enter to terminate Staff Service");
Console.ReadLine();
}
finally
{
sh.Close();
}
Bước 5. Tạo các cấu hình dịch vụ
6. Tiếp theo chọn phương pháp làm việc là Advanced Web Services interoperability, và đặt kiểu liên kết là Simplex Communication
7. Đặt mặc định (trống) cho trường địa chỉ, và bấm Finish, bạn sẽ thấy kết quả sau
8. Giờ bạn bấm vào biểu tượng Host phía bên trái, sau đó chọn thêm mới địa chỉ cơ sở cho dịch vụ của bạn, đặt địa chỉ là http://localhost:8000/StaffService
9. Mở rộng nút EndPoints, chọn điểm cuối, rồi đặt tên là ep1
Figure 9 Đặt tên cho điểm cuối
10. Kết thúc quá trình này bạn sẽ có tệp cấu hình như sau:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<services>
<service name="StaffService.Staff">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration=""
name="ep1" contract="StaffService.IStaff" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/StaffService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
2.2.2 Phát hành thông tin về dịch vụ
Để phát hành thông tin về dịch vụ cho các ứng dụng khác khai thác, ta cần theo các bước sau:
1. Mở rộng nút Advanced (bên trái), sau đó chọn nút Service Behaviors và bấm vào New Service Behavior Configuration ở bên phải
5. Cuối cùng là tạo điểm cuối để các ứng dụng có thể kết nối tới dịch vụ để lấy các thông tin về dịch vụ. Bấm chuột phải vào Endpoints vào chọn New Service Endpoint sau đó đặt cấu hình như sau:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MetaDataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8000/StaffService" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MetaDataBehavior" name="StaffService.Staff">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration=""
name="ep1" contract="StaffService.IStaff" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
name="ep2" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/StaffService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
7. Sử dụng Internet Explorer truy xuất tới địa chỉ http://localhost:8000/StaffService bạn sẽ thấy được những gì bạn cần
2.1.1 .NET Framework 3.5 SP1:
- Để xây dựng một dịch vụ WCF, đầu tiên bạn cần phải cài đặt .NET Framework 3.5 SP1. Thực ra chỉ cần .NET Framework 3.0 là đủ, tuy nhiên .NET Framework 3.5 SP1 còn cung cấp thêm cho bạn nhiều tính năng nữa, nên bạn nên cài .NET Framework 3.5 SP1. Bản cài đặt của framework được Microsoft cung cấp ở trang web http://www.microsoft.com/downloads/details.aspx?familyid=ab99342f-5d1a-413d-8319-81da479ab0d7&displaylang=en hoặc tại http://download.microsoft.com/download/2/0/e/20e90413-712f-438c-988e-fdaa79a8ac3d/dotnetfx35.exe
- Sau khi cài đặt .NET Framework 3.5 SP1, bạn thực hiện cài đặt Visual Studio 2008 bản Express hoặc bản Professional tuỳ theo bạn có bản nào. Nếu kinh phí hạn hẹp, bạn có thể tải về bản Visual Studio 2008 Express Edition miễn phí trên trang web của Microsoft, link ở đây: http://go.microsoft.com/?linkid=9350817
- Giờ đây bạn đã sẵn sàng để tạo ra dịch vụ đầu tiên trên WCF
Bạn có thể hình dung ứng dụng chúng ta sẽ xây dựng như sau. Công ty Contoso cần xây dựng một hệ thống quản lý các nhân viên của công ty. Ban đầu, chúng ta cần phải xây dựng một ứng dụng ở server
- Cung cấp danh sách các nhân viên, và
- Cho phép hỏi về ngày sinh của một nhân viên nào đó.
- Sau đó cần một ứng dụng phía client để làm những việc sau
- Hiển thị danh sách các nhân viên
- Chọn một nhân viên và hiển thị ngày sinh của nhân viên đó.
Bước 1. Tạo ứng dụng
1. Mở Visual Studio 2008, chọn tạo mới C# Console Project đặt tên là StaffService, xem Figure 1
Bước 2. Tạo contract dịch vụ
1. Định nghĩa giao diện sẽ được sử dụng như là contract cho ứng dụng của chúng ta, thêm vào thuộc tính ServiceContract cho giao diện đó
2. Định nghĩa 2 hàm như đoạn mã nguồn sau, các hàm này đóng vai trò là các contract operations miêu tả chức năng của dịch vụ
[ServiceContract]Bước 3. Cài đặt dịch vụ
public interface IStaff
{
[OperationContract]
string DisplayStaff();
[OperationContract]
DateTime GetBirthday(int staffId);
}
1. Định nghĩa lớp Staff để cài đặt giao diện IStaff
2. Thực hiện cài đặt cho 2 hàm được định nghĩa trong giao diện IStaff
namespace StaffServiceBước 4. Tạo vật chứa dịch vụ
{
public class Staff : IStaff
{
#region IStaff Members
public string DisplayStaff()
{
return "1. Lê Anh\n2. Trần Văn Bình\n3. Nguyễn Văn Cương\n4.Đinh Văn Dũng";
}
public DateTime GetBirthday(int staffId)
{
switch (staffId)
{
case 1:
return new DateTime(1979, 1, 20);
case 2:
return new DateTime(1975, 5, 1);
case 3:
return new DateTime(1967, 2, 26);
case 4:
return new DateTime(1958, 10, 11);
default:
return DateTime.Now;
}
}
#endregion
}
}
1. Thêm đoạn mã nguồn sau vào hàm main
ServiceHost sh = new ServiceHost(typeof(Staff));
try
{
sh.Open();
Console.WriteLine("Staff Service opened successfully");
Console.WriteLine("Press Enter to terminate Staff Service");
Console.ReadLine();
}
finally
{
sh.Close();
}
Bước 5. Tạo các cấu hình dịch vụ
1. Compile project của bạn, đảm bảo rằng không có lỗi xảy ra trong quá trình biên dịch
2. Mở trình soạn thảo dịch vụ, Service Configuration Editor và nạp tệp ứng dụng, bằng cách trong Visual Studio 2008, chọn menu Tools, chọn lựa chọn WCF Service Configuration Editor
3. Chọn New Config, đặt tên là Staff.Service
Figure 3 Tạo config cho service
4. Đặt contract dịch vụ là StaffService.IStaff
6. Tiếp theo chọn phương pháp làm việc là Advanced Web Services interoperability, và đặt kiểu liên kết là Simplex Communication
7. Đặt mặc định (trống) cho trường địa chỉ, và bấm Finish, bạn sẽ thấy kết quả sau
8. Giờ bạn bấm vào biểu tượng Host phía bên trái, sau đó chọn thêm mới địa chỉ cơ sở cho dịch vụ của bạn, đặt địa chỉ là http://localhost:8000/StaffService
9. Mở rộng nút EndPoints, chọn điểm cuối, rồi đặt tên là ep1
Figure 9 Đặt tên cho điểm cuối
10. Kết thúc quá trình này bạn sẽ có tệp cấu hình như sau:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<services>
<service name="StaffService.Staff">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration=""
name="ep1" contract="StaffService.IStaff" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/StaffService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
2.2.2 Phát hành thông tin về dịch vụ
Để phát hành thông tin về dịch vụ cho các ứng dụng khác khai thác, ta cần theo các bước sau:
1. Mở rộng nút Advanced (bên trái), sau đó chọn nút Service Behaviors và bấm vào New Service Behavior Configuration ở bên phải
5. Cuối cùng là tạo điểm cuối để các ứng dụng có thể kết nối tới dịch vụ để lấy các thông tin về dịch vụ. Bấm chuột phải vào Endpoints vào chọn New Service Endpoint sau đó đặt cấu hình như sau:
- Name: ep2
- Address: mex
- Binding: mexHttpBinding
- Contract: ImetaDataExchange
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MetaDataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8000/StaffService" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MetaDataBehavior" name="StaffService.Staff">
<endpoint address="" binding="wsHttpBinding" bindingConfiguration=""
name="ep1" contract="StaffService.IStaff" />
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
name="ep2" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/StaffService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
7. Sử dụng Internet Explorer truy xuất tới địa chỉ http://localhost:8000/StaffService bạn sẽ thấy được những gì bạn cần
WCF (part 2)
1 Mô hình lập trình WCF
1.1 Sử dụng phương pháp hướng đối tượng hay hướng dịch vụ?
public interface DichVuBanHang
{
decimal TinhGiaVanChuyen(string diachi, decimal trongluong)
{
// thực hiện tính toán
}
decimal TinhTienThue(decimal tongGiaTien)
{
// thực hiện tính toán
}
}
Ta sẽ có phần hướng dịch vụ cho dịch vụ WCF khi thêm vào các thuộc tính cho giao diện ở trên [ServiceContract]
[ServiceContract]
public interface DichVuBanHang
{
[OperationContract]
decimal TinhGiaVanChuyen(string diachi, decimal trongluong)
{
// thực hiện tính toán
}
[OperationContract]
decimal TinhTienThue(decimal tongGiaTien)
{
// thực hiện tính toán
}
}
Như vậy là qua ví dụ trên các bạn có thể thấy mối liên kết giữa phương pháp hướng đối tượng và hướng dịch vụ trong WCF. Các bạn chưa cần quan tâm tới các thuộc tính [ServiceContract] và [OperationContract] vội, bởi vì những thuộc tính này, và còn nhiều thứ khác nữa sẽ được giới thiệu một cách chi tiết khi thích hợp.
1.2 Service Model (Mô hình dịch vụ):
Có một số phương pháp lập trình với WCF, mỗi phương pháp có ưu điểm và khuyết điểm riêng của nó. Điều đặc biệt về WCF là luôn có hơn một cách để giải quyết một vấn đề trong WCF, và bạn không nhất thiết phải chọn duy nhất một phương pháp nào. Trong thực tế, cách làm tốt nhất là tổ hợp các phương pháp để có được sự linh hoạt và mềm dẻo cho dịch vụ của bạn.
Có ba phương pháp hay được sử dụng khi phát triển dịch vụ WCF như sau:
[ServiceContract]
public interface ICalcService
{
[OperationContract(Name="AddInt")]
int Add(int x, int y);
[OperationContract(Name="AddDouble")]
double Add(double x, double y);
}
Các bạn có thể thấy là chúng ta sử dụng được phép nạp chồng tên trong C# và sử dụng thêm tham số Name để quy định thêm tên hàm ở dịch vụ. Ngoài ưu điểm trong việc giải quyết nạp chồng tên hàm, ta còn thấy một lợi ích khác nữa là, việc quy định tham số Name trong thuộc tính OperationContract còn cho ta thêm linh hoạt trong việc đổi tên các hàm trong giao diện mà không làm thay đổi định nghĩa dịch vụ, nghĩa là các ứng dụng khác sử dụng dịch vụ này không cần phải biên dịch lại.1.3.2 Explicit programming (Phương pháp lập trình trực tiếp)
Là phương pháp lập trình hướng đối tượng, bạn làm việc trực tiếp với các lớp và giao diện cung cấp bởi mô hình đối tượng của WCF. Làm việc trực tiếp với mô hình đối tượng cho phép nhà phát triển tính linh hoạt cao hơn và khả năng điều khiển tốt hơn thông qua mã nguồn của họ. Thêm nữa nó cho phép điều khiển sâu hơn rất nhiều so với phương pháp khai báo và phương pháp sử dụng tập tin cấu hình.
1.3.3 Phương pháp sử dụng tập tin cấu hình
Cũng giống như phương pháp khai báo, có rất nhiều thứ mà bạn có thể quy định liên quan đến hành xử của một dịch vụ thông qua tập tin cấu hình của dịch vụ. Điều hay trong cách tiếp cận này là những thay đổi ở tập tin cấu hình hoàn toàn không cần phải biên dịch lại dịch vụ mới sử dụng được.
Sau đây là ví dụ sử dụng tập tin cấu hình để định nghĩa dịch vụ tính toán trong ví dụ của phần phương pháp khai báo.
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="CalculationService.CalcServiceBehavior"
name="CalculationService.CalcService">
<endpoint address="" binding="wsHttpBinding" contract="CalculationService.ICalcService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/CalcService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CalculationService.CalcServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
theo: http://forum.aspvn.net/
1.1 Sử dụng phương pháp hướng đối tượng hay hướng dịch vụ?
- Nếu các bạn đã học qua môn học về các phương pháp lập trình hẳn sẽ thấy có 2 phương pháp chính là hướng thủ tục và hướng đối tượng. Và phương pháp hướng đối tượng trong thời gian gần đây được phát triển rất mạnh và được hỗ trợ ngay trong các ngôn ngữ lập trình như C# hay VB.NET. Khi làm việc với các dịch vụ web bạn đã làm quen với một phương pháp nữa là lập trình hướng dịch vụ (Service-oriented programming). Microsoft đã cung cấp nhiều công cụ trên .NET Framework để hỗ trợ phương pháp lập trình này thông qua các lớp trong không gian tên: System.Web.Services.
- Như vậy khi làm việc với WCF bạn có hai lựa chọn là hướng đối tượng và hướng dịch vụ. Vậy ta nên sử dụng phương pháp nào? Câu trả lời là dùng cả hai. Nói một cách đơn giản là phương pháp hướng đối tượng được sử dụng để phát triển các ứng dụng trên desktop, còn phương pháp hướng dịch vụ được sử dụng để kết nối các ứng dụng đó với nhau. Điều quan trọng ở đây là làm sao để hiểu được sự khác nhau giữa hai phương pháp và hiểu được khi nào chúng được sử dụng và sử dụng như thế nào đồng thời cũng phải hiểu về các lợi ích chúng cung cấp.
- Về hướng đối tượng có thể hiểu như sau. Các ứng dụng hướng đối tượng là hai hay nhiều lớp phụ thuộc lẫn nhau và chia sẻ chung các kiểu dữ liệu. Những lớp này liên lạc với nhau thông qua các lời gọi các hàm mà lớp đối tượng cung cấp.
- Các ứng dụng hướng dịch vụ là các chương trình không biết gì về nhau. Mỗi ứng dụng liên lạc với ứng dụng khác thông qua các bản tin. Điểm đặc biệt là các bản tin này được gửi từ một ứng dụng sang ứng dụng khác mà không quan tâm tới nền tảng mà dịch vụ đang chạy.
- Khi phát triển các dịch vụ WCF, điều quan trọng là cần hiểu sự liên kết giữa hướng đối tượng và hướng dịch vụ. Khi làm việc với .NET Framework bạn chắc chắn rất quen thuộc với thuật ngữ lớp (class) và giao diện (interface). Các thuật ngữ này vẫn được sử dụng khi phát triển dịch vụ WCF. Các lớp và giao diện là phần hướng đối tượng trong WCF, còn phần hướng dịch vụ trong WCF sẽ được thấy khi bạn đưa vào các thuộc tính WCF để định nghĩa các thực thể.
public interface DichVuBanHang
{
decimal TinhGiaVanChuyen(string diachi, decimal trongluong)
{
// thực hiện tính toán
}
decimal TinhTienThue(decimal tongGiaTien)
{
// thực hiện tính toán
}
}
Ta sẽ có phần hướng dịch vụ cho dịch vụ WCF khi thêm vào các thuộc tính cho giao diện ở trên [ServiceContract]
[ServiceContract]
public interface DichVuBanHang
{
[OperationContract]
decimal TinhGiaVanChuyen(string diachi, decimal trongluong)
{
// thực hiện tính toán
}
[OperationContract]
decimal TinhTienThue(decimal tongGiaTien)
{
// thực hiện tính toán
}
}
Như vậy là qua ví dụ trên các bạn có thể thấy mối liên kết giữa phương pháp hướng đối tượng và hướng dịch vụ trong WCF. Các bạn chưa cần quan tâm tới các thuộc tính [ServiceContract] và [OperationContract] vội, bởi vì những thuộc tính này, và còn nhiều thứ khác nữa sẽ được giới thiệu một cách chi tiết khi thích hợp.
1.2 Service Model (Mô hình dịch vụ):
- Nếu bạn đã từng làm việc với dịch vụ web, bạn sẽ thấy mô hình này quen thuộc với bạn theo một cách nào đó. Khi bạn tạo một dịch vụ web, bạn thực sự tạo ra một dịch vụ (service). Dịch vụ web chứa một tài liệu XML để mô tả tất cả mọi thứ cần biết về dịch vụ đó. Tài liệu này được mô tả bằng ngôn ngữ Web Service Description Language (ngôn ngữ mô tả dịch vụ web). Nó chứa ba phần:
- Service (dịch vụ): Chứa thông tin về vị trí của dịch vụ
- Binding: Chứa thông tin về cách liên lạc với dịch vụ, như dịch vụ sử dụng giao thức gì, vv.
- PortType (kiểu cổng): Giải thích về dịch vụ sẽ làm gì
- Mô hình dịch vụ trên WCF cũng tương tự như với mô hình dịch vụ web. Điểm khác biệt là ở cách đặt tên. Trong WCF các phần không được gọi là service, binding, và portType mà được gọi tương ứng là address (địa chỉ), binding, và contract.
- Mô hình dịch vụ WCF được cung cấp trong không gian tên System.ServiceModel. Không gian tên này chứa rất nhiều lớp, nhưng bạn hoàn toàn không cần biết toàn bộ chúng. Để sử dụng mô hình và xây dựng dịch vụ, ta thường sử dụng một số lớp sau:
Để định nghĩa việc liên lạc của dịch vụ, ta thường hay sử dụng các lớp sau:
- BasicHTTPBinding : Là binding mà các điểm cuối dịch vụ có thể sử dụng để liên lạc với các ứng dụng khách và dịch vụ web (ASMX)
- NetMsmqBinding : Là binding mà các điểm cuối dịch vụ có thể sử dụng để liên lạc với các MSMQ khách và các dịch vụ khác
- NetNamedPipeBinding : Là binding mà các điểm cuối dịch vụ có thể sử dụng để liên lạc với các ứng dụng khách/dịch vụ trên cùng một máy
- WSHTTPBinding : Là binding mà các điểm cuối dịch vụ có thể sử dụng để liên lạc với các ứng dụng khách/dịch vụ sử dụng các giao dịch phân tán và các phiên làm việc bảo mật và tin cậy được.
- EndpointAddress :Lớp biểu diễn địa chỉ duy nhất được cung cấp và truy xuất được cho máy khách để liên lạc với điểm cuối dịch vụ
- EndpointAddressBuilding : Là phương pháp để tạo mới các địa chỉ đầu cuối với các giá trị tham số xác định
- ChannelFactory : Là phương pháp trong đó các kiểu kênh khác nhau được tạo ra và quản lý, và đưa tới cho các ứng dụng khách để gửi bản tin tới các điểm cuối
- Identity : Cách mà một định danh được xác định, cho phép xác thực giữa các điểm cuối khi trao đổi bản tin
- MessageHeader : Biểu diễn nội dung của một đầu đề bản tin SOAP
- ServiceHost : Phương pháp cung cấp vật chứa cho các dịch vụ
- ReliableSession : Cung cấp truy xuất tới các thuộc tính của thành phần binding trong phiên làm việc tin cậy.
- AddressHeader: Phần đầu đề chưa thông tin địa chỉ được sử dụng để xác định và liên lạc với một điểm cuối
- AddressHeaderCollection : Một tập hợp các đầu đề địa chỉ
- Binding : Tập hợp các thành phần binding, mỗi binding định nghĩa cách mà một điểm cuối liên lạc với thế giới bên ngoài
- BindingContext : Cung cấp địa chỉ và thông tin binding cần thiết cho việc xây dựng kênh
- BindingElement: Biểu diễn một thành phần binding, được sử dụng để xây dựng các binding
- CustomBinding :Sử dụng để định nghĩa và xây dựng một tuỳ biến binding từ một tập các thành phần binding
- Message : Một đơn vị của liên lạc giữa các điểm cuối
- MessageHeader : Nội dung của đầu đề bản tin SOAP
- MessageHeaders : Tập hợp các đầu đề bản tin
Có một số phương pháp lập trình với WCF, mỗi phương pháp có ưu điểm và khuyết điểm riêng của nó. Điều đặc biệt về WCF là luôn có hơn một cách để giải quyết một vấn đề trong WCF, và bạn không nhất thiết phải chọn duy nhất một phương pháp nào. Trong thực tế, cách làm tốt nhất là tổ hợp các phương pháp để có được sự linh hoạt và mềm dẻo cho dịch vụ của bạn.
Có ba phương pháp hay được sử dụng khi phát triển dịch vụ WCF như sau:
- Phương pháp khai báo
- Phương pháp lập trình trực tiếp
- Phương pháp sử dụng tập tin cấu hình
- Lập trình khai báo đạt được thông qua các thuộc tính. Những thuộc tính này được sử dụng để định nghĩa các contract và xác định hành xử của dịch vụ. Chúng được sử dụng để xác định thêm các tham số để thay đổi các chi tiết của contract và hành xử dịch vụ.
- Thuộc tính ServiceContract dùng để quy định là giao diện này định nghĩa các chức năng của một dịch vụ. Thuộc tính OperationContract được sử dụng ở các hàm để quy định rằng hàm này được khai báo là một phần của dịch vụ. Đó là tất cả những gì cần để tạo ra một dịch vụ WCF.
- Thêm nữa, bạn không nhất thiết phải sử dụng các giao diện (interface) khi cài đặt một dịch vụ, điều này cũng giống như việc bạn không cần phải sử dụng giao diện để định nghĩa một lớp. Tuy vậy bạn nhất thiết phải quy định phần nào thuộc về dịch vụ. Bạn có thể định nghĩa những phần khác cần cho giao diện, nhưng chỉ những hàm (phương thức) có gắn thuộc tính [OperationContract].
- Ví dụ ta có một dịch vụ thực hiện phép tính cộng giữa 2 số nguyên AddInt và 2 số thực AddDouble. Ta khai báo dịch vụ như sau:
Như vậy dịch vụ của chúng ta sau khi khai báo sẽ có 2 phương thức (khai báo với thuộc tính OperationContract) là AddInt và AddDouble. Tuy nhiên khi khai báo trong C#, việc đặt tên AddInt và AddDouble, và có thể có một số hàm add cho các kiểu dữ liệu khác, có thể rút gọn lại thành một tên hàm Add mà thôi. Nhưng các dịch vụ lại không cho phép đặt trùng tên hàm như thế. Chúng ta có thể khai báo thêm với thuộc tính OperationContract để thực hiện, cách làm như sau:[ServiceContract]
public interface ICalcService
{
[OperationContract]
int AddInt(int x, int y);
[OperationContract]
double AddDouble(double x, double y);
}
[ServiceContract]
public interface ICalcService
{
[OperationContract(Name="AddInt")]
int Add(int x, int y);
[OperationContract(Name="AddDouble")]
double Add(double x, double y);
}
Các bạn có thể thấy là chúng ta sử dụng được phép nạp chồng tên trong C# và sử dụng thêm tham số Name để quy định thêm tên hàm ở dịch vụ. Ngoài ưu điểm trong việc giải quyết nạp chồng tên hàm, ta còn thấy một lợi ích khác nữa là, việc quy định tham số Name trong thuộc tính OperationContract còn cho ta thêm linh hoạt trong việc đổi tên các hàm trong giao diện mà không làm thay đổi định nghĩa dịch vụ, nghĩa là các ứng dụng khác sử dụng dịch vụ này không cần phải biên dịch lại.1.3.2 Explicit programming (Phương pháp lập trình trực tiếp)
Là phương pháp lập trình hướng đối tượng, bạn làm việc trực tiếp với các lớp và giao diện cung cấp bởi mô hình đối tượng của WCF. Làm việc trực tiếp với mô hình đối tượng cho phép nhà phát triển tính linh hoạt cao hơn và khả năng điều khiển tốt hơn thông qua mã nguồn của họ. Thêm nữa nó cho phép điều khiển sâu hơn rất nhiều so với phương pháp khai báo và phương pháp sử dụng tập tin cấu hình.
1.3.3 Phương pháp sử dụng tập tin cấu hình
Cũng giống như phương pháp khai báo, có rất nhiều thứ mà bạn có thể quy định liên quan đến hành xử của một dịch vụ thông qua tập tin cấu hình của dịch vụ. Điều hay trong cách tiếp cận này là những thay đổi ở tập tin cấu hình hoàn toàn không cần phải biên dịch lại dịch vụ mới sử dụng được.
Sau đây là ví dụ sử dụng tập tin cấu hình để định nghĩa dịch vụ tính toán trong ví dụ của phần phương pháp khai báo.
<configuration>
<system.web>
<compilation debug="true" />
</system.web>
<system.serviceModel>
<services>
<service behaviorConfiguration="CalculationService.CalcServiceBehavior"
name="CalculationService.CalcService">
<endpoint address="" binding="wsHttpBinding" contract="CalculationService.ICalcService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/CalcService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CalculationService.CalcServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
theo: http://forum.aspvn.net/
WCF (part 1)
1)Windows Communication Foundation (WCF) là gì?
Như phần trên đã trình bày, .NET 2.0 hỗ trợ rất nhiều phương pháp liên lạc giữa các ứng dụng khác nhau nhằm vào các mục tiêu khác nhau. Các phương pháp liên lạc này khá phức tạp và phải mất nhiều thời gian để làm chủ được công nghệ. Tuy nhiên kiến thức thu được từ việc triển khai một phương pháp ít có khả năng dùng được khi làm việc với phương pháp khác.
Với việc ra đời của WCF, mọi phương pháp liên lạc trước kia đều có thể thực hiện trên WCF. Do vậy nhà phát triển chỉ cần làm chủ được công nghệ WCF là có thể xây dựng các ứng dụng một cách nhanh chóng.
WCF là một mô hình lập trình cho phép nhà phát triển xây dựng các giải pháp dịch vụ đảm bảo tính ổn định, và bảo mật và thậm chí là đảm bảo giao dịch. Nó làm đơn giản hoá việc phát triển các ứng dụng nối kết và đưa ra cho nhà phát triển những giá trị mà có thể họ chưa nhận ra ngay, đó là cách tiếp cận phát triển hệ thống phân tán thống nhất, đơn giản, và quản lý được.
Do WCF được xây dựng trên cơ sở của .NET Framework 2.0 CLR, nó là tập các lớp cho phép các nhà phát triển xây dựng các ứng dụng hướng dịch vụ bằng môi trường lập trình quen thuộc của họ như VB.NET hay C#
3)Kiến trúc của WCF
Hình sau mô tả các lớp chủ yếu trong kiến trúc của Windows Communication Foundation (WCF)
Figure 1 Kiến trúc của WCF (hình ảnh từ www.microsoft.com) 4.1 Các contracts (Các hiệp nghị)
3.2 Runtime service (Dịch vụ thực thi):
Lớp dịch vụ thực thi chứa các hành xử sẽ xảy ra trong quá trình thực hiện của dịch vụ, nghĩa là các hành xử thực thi của dịch vụ. Ta sẽ thấy một số các hành xử như sau:
Lớp bản tin là tập hợp các kênh. Mỗi kênh là một thành phần xử lý bản tin theo một cách nào đó. Một tập các kênh thường được gọi là ngăn xếp kênh. Các kênh làm việc trên bản tin và trên đầu đề của bản tin. Lớp này khác với lớp thực thi dịch vụ chủ yếu bởi sự khác nhau trong việc xử lý nội dung bản tin.
Có hai kênh khác nhau là kênh vận chuyển (transport channel) và kênh điều khiển (control channel).
Nhìn một cách tổng thể thì một dịch vụ thực chất là một chương trình. Cũng giống như các chương trình khác, một dịch vụ cần phải chạy trong một tệp thực thi. Dịch vụ này thường được gọi là dịch vụ tự chứa.
Các dịch vụ còn có thể được chứa, hoặc chạy trong một tệp thực thi được quản lý bởi một agent bên ngoài như IIS hay Windows Activation Services (WAS). WAS cho phép WCF được kích hoạt một cách tự động khi phân phối tới một máy tính có chạy WAS.
4. Các tính năng của WCF
WCF có nhiều tính năng và sẽ được mô tả chi tiết trong toàn bộ khoá học. Mục này chỉ nhằm mục đích thảo luận một số tính năng của WCF. Danh sách các tính năng ở đây không phải là danh sách hoàn chỉnh, mà chỉ hy vọng là danh sách các tính năng “đỉnh” nhất.
4.1 Transaction (Giao dịch)
Để phát triển ứng dụng với WCF ta cần các phần mềm sau:
- WCF là công nghệ nền tảng nhằm thống nhất nhiều mô hình lập trình giao tiếp được hỗ trợ trong .NET 2.0 thành một mô hình duy nhất. Vào tháng 11 năm 2005, .NET 2.0 được Microsoft phát hành trong đó có cung cấp các hàm API riêng biệt cho các liên lạc dựa trên SOAP để tối đa hoá sự làm việc giữa các nền tảng sử dụng Web Services, đồng thời .NET 2.0 còn cung cấp các API để tối ưu việc liên lạc dựa trên mã nhị phân giữa các ứng dụng chạy trên hệ thống Windows gọi là .NET Remoting, các API cho các giao dịch phân tán, và API cho liên lạc dị bộ. WCF thống nhất các API này thành một mô hình duy nhất nhằm đáp ứng mô hình lập trình hướng dịch vụ.
- WCF có thể sử dụng các bản tin SOAP giữa hai tiến trình, do đó làm cho các ứng dụng dựa trên WCF có thể làm việc với các tiến trình khác thông qua việc giao tiếp sử dụng bản tin SOAP. Khi một tiến trình WCF liên lạc với một tiến trình không là WCF, các bản tin SOAP được mã hoá trên cơ sở XML, nhưng khi nó liên lạc với một tiến trình WCF khác, bản tin SOAP có thể được tối ưu hoá dựa trên mã hoá nhị phân.
Như phần trên đã trình bày, .NET 2.0 hỗ trợ rất nhiều phương pháp liên lạc giữa các ứng dụng khác nhau nhằm vào các mục tiêu khác nhau. Các phương pháp liên lạc này khá phức tạp và phải mất nhiều thời gian để làm chủ được công nghệ. Tuy nhiên kiến thức thu được từ việc triển khai một phương pháp ít có khả năng dùng được khi làm việc với phương pháp khác.
Với việc ra đời của WCF, mọi phương pháp liên lạc trước kia đều có thể thực hiện trên WCF. Do vậy nhà phát triển chỉ cần làm chủ được công nghệ WCF là có thể xây dựng các ứng dụng một cách nhanh chóng.
WCF là một mô hình lập trình cho phép nhà phát triển xây dựng các giải pháp dịch vụ đảm bảo tính ổn định, và bảo mật và thậm chí là đảm bảo giao dịch. Nó làm đơn giản hoá việc phát triển các ứng dụng nối kết và đưa ra cho nhà phát triển những giá trị mà có thể họ chưa nhận ra ngay, đó là cách tiếp cận phát triển hệ thống phân tán thống nhất, đơn giản, và quản lý được.
Do WCF được xây dựng trên cơ sở của .NET Framework 2.0 CLR, nó là tập các lớp cho phép các nhà phát triển xây dựng các ứng dụng hướng dịch vụ bằng môi trường lập trình quen thuộc của họ như VB.NET hay C#
3)Kiến trúc của WCF
Hình sau mô tả các lớp chủ yếu trong kiến trúc của Windows Communication Foundation (WCF)
Figure 1 Kiến trúc của WCF (hình ảnh từ www.microsoft.com) 4.1 Các contracts (Các hiệp nghị)
Các contracts (Các hiệp nghị)
Các contract trong WCF cũng giống như các hợp đồng/hiệp định mà bạn ký trong đời sống thật. Một hợp đồng bạn ký có thể chứa các thông tin như kiểu công việc bạn sẽ làm, và những thông tin mà bạn muốn đưa ra cho các bên khác. WCF contract cũng chứa các thông tin tương tự như vậy. Contract định nghĩa các đặc tả trong hệ thống bản tin.Thông thường có các loại contract sau:
Các contract trong WCF cũng giống như các hợp đồng/hiệp định mà bạn ký trong đời sống thật. Một hợp đồng bạn ký có thể chứa các thông tin như kiểu công việc bạn sẽ làm, và những thông tin mà bạn muốn đưa ra cho các bên khác. WCF contract cũng chứa các thông tin tương tự như vậy. Contract định nghĩa các đặc tả trong hệ thống bản tin.Thông thường có các loại contract sau:
- Contract dữ liệu mô tả các tham số cho các bản tin mà một dịch vụ có thể tạo ra hay sử dụng. Các tham số bản tin được định nghĩa bằng các tài liệu sử dụng ngôn ngữ đặc tả XML Schema (XSD), điều này cho phép các hệ thống hiểu XML có thể xử lý tài liệu dễ dàng. Các dịch vụ khi liên lạc với nhau có thể không cần đồng ý với nhau về các kiểu, nhưng cần đồng ý về contract dữ liệu, nghĩa là đồng ý về các tham số và các kiểu trả về.
- Contract bản tin định nghĩa các phần có trong bản tin sử dụng các giao thức SOAP, và nó cho phép điều khiển sâu hơn tới các phần trong bản tin khi có yêu cầu sự chính xác như vậy.
- Contract dịch vụ đặc tả chi tiết các phương thức của dịch vụ, và được phân phối như là một giao diện trong các ngôn ngữ lập trình như Visual Basic hay Visual C#. Có thể hình dung về contract dịch vụ một cách gián tiếp như sau: „Đây là các kiểu dữ liệu của các bản tin của tôi, đây là nơi tôi cung cấp, và đây là các giao thức mà tôi có thể liên lạc”
- Các chính sách và các kết nối (bindings) mô tả các điều kiện cần có để giao tiếp với một dịch vụ. Các chính sách sẽ bao gồm cả các yêu cầu về bảo mật và các điều kiện khác cần phải có khi kết nối với một dịch vụ.
Lớp dịch vụ thực thi chứa các hành xử sẽ xảy ra trong quá trình thực hiện của dịch vụ, nghĩa là các hành xử thực thi của dịch vụ. Ta sẽ thấy một số các hành xử như sau:
- Throttling behavior: Điều khiển luồng nhằm quy định xem có bao nhiêu bản tin được xử lý
- Error behavior: Hành xử lỗi quy định những hành động khi lỗi xảy ra trong hệ thống
- Metadata behavior: Hành xử với các siêu dữ liệu quy định xem làm thế nào và khi nào thì các siêu dữ liệu được đưa ra bên ngoài dịch vụ
- Instance behavior: Hành xử thực thể quy định xem có bao nhiêu thực thể của dịch vụ đó được chạy
- Transaction behavior: Hành xử giao dịch cho phép việc rollback các giao dịch nếu xảy ra lỗi
- Message inspection: Kiểm tra bản tin đem lại cho dịch vụ khả năng kiểm tra tất cả hay một số phần của bản tin
- Dispatch behavior: Khi một bản tin được xử lý bởi nền tảng WCF, dịch vụ Dispatch behavior xác định xem bản tin được xử lý như thế nào.
- Concurrency behavior: Hành xử đồng thời xác định xem việc xử lý thế nào với việc đa luồng của mỗi dịch vụ hay mỗi thực thể của dịch vụ. Hành xử này giúp cho việc điều khiển số lượng luồng có thể truy nhập tới một thực thể của dịch vụ.
- Parameter filtering: Khi một bản tin được đưa tới một dịch vụ, sẽ xảy ra một số hành động dựa trên nội dung phần đầu đề của bản tin. Phần lọc tham số sẽ thực hiện lọc các đầu đề bản tin và thực hiện các hành động đặt sẵn dựa trên việc lọc đầu đề bản tin.
Lớp bản tin là tập hợp các kênh. Mỗi kênh là một thành phần xử lý bản tin theo một cách nào đó. Một tập các kênh thường được gọi là ngăn xếp kênh. Các kênh làm việc trên bản tin và trên đầu đề của bản tin. Lớp này khác với lớp thực thi dịch vụ chủ yếu bởi sự khác nhau trong việc xử lý nội dung bản tin.
Có hai kênh khác nhau là kênh vận chuyển (transport channel) và kênh điều khiển (control channel).
- Kênh vận chuyển phụ trách việc đọc và ghi các bản tin từ mạng (network) hoặc từ một số điểm giao dịch bên ngoài)
- Kênh điều khiển thực hiện xử lý bản tin theo giao thức, thông thường làm việc bằng cách đọc và ghi thêm các đầu đề cho bản tin
Nhìn một cách tổng thể thì một dịch vụ thực chất là một chương trình. Cũng giống như các chương trình khác, một dịch vụ cần phải chạy trong một tệp thực thi. Dịch vụ này thường được gọi là dịch vụ tự chứa.
Các dịch vụ còn có thể được chứa, hoặc chạy trong một tệp thực thi được quản lý bởi một agent bên ngoài như IIS hay Windows Activation Services (WAS). WAS cho phép WCF được kích hoạt một cách tự động khi phân phối tới một máy tính có chạy WAS.
4. Các tính năng của WCF
WCF có nhiều tính năng và sẽ được mô tả chi tiết trong toàn bộ khoá học. Mục này chỉ nhằm mục đích thảo luận một số tính năng của WCF. Danh sách các tính năng ở đây không phải là danh sách hoàn chỉnh, mà chỉ hy vọng là danh sách các tính năng “đỉnh” nhất.
4.1 Transaction (Giao dịch)
- Một giao dịch là một đơn vị của công việc. Một giao dịch đảm bảo chắc chắn rằng mọi thứ diễn ra trong giao dịch thành công hay thất bại đều là kết quả tổng thể. Ví dụ, nếu một giao dịch chứa ba mục công việc cần thực hiện, trong quá trình thực hiện giao dịch, một trong số các mục đó bị thất bại, khi đó cả ba mục sẽ là thất bại. Giao dịch chỉ thành công khi cả ba mục công việc đều thành công. Giao dịch thường thấy trong các thao tác với cơ sở dữ liệu.
- WCF cho phép đưa vào việc xử lý giao dịch như trên với các liên lạc. Nhà phát triển có thể nhóm các liên lạc với nhau thành các giao dịch. Ở mức doanh nghiệp, tính năng này cho phép bạn thực hiện các công việc giao dịch qua các nền tảng khác nhau.
- WCF cho phép các dịch vụ được chứa trong một số lớn các môi trường khác nhau, như Windows NT Services, Windows Forms, và ứng dụng console, cũng như ở trên IIS (Internet Information Server) và WAS (Windows Activation Services).
- Chứa ứng dụng trên IIS còn có thêm các lợi điểm khác là dịch vụ có thể nhận các ưu điểm của rất nhiều tính năng có sẵn trên IIS, ví dụ IIS có thể điều khiển một cách tự động việc bắt đầu hay kết thúc một dịch vụ.
- Bảo mật là tính năng không thể thiếu trong WCF nói riêng và trong liên lạc nói chung. Trong WCF, tất cả mọi thứ từ các bản tin tới các client hay server đều phải xác thực và WCF có tính năng để đảm bảo rằng các bản tin không bị lẫn trong quá trình vận chuyển. WCF bao gồm việc đảm bảo tính toàn vẹn và bảo mật của bản tin.
- WCF còn cho phép bạn tích hợp ứng dụng của bạn với cơ sở hạ tầng bảo mật sẵn có, bao gồm cả các chuẩn bên ngoài môi trường Windows bằng cách sử dụng các bản tin SOAP bảo mật.
Để phát triển ứng dụng với WCF ta cần các phần mềm sau:
- .NET Framework 3.5. Học viên có thể tải về bộ cài của .NET Framework 3.5 tại trang web của Microsoft. Địa chỉ như sau: http://www.microsoft.com/downloads/details.aspx?familyid=ab99342f-5d1a-413d-8319-81da479ab0d7&displaylang=en
- Microsoft Visual Studio 2008. Bản dùng thử có thể tải về ở đây: http://msdn.microsoft.com/en-us/visualc/aa700831.aspx
- Hoặc Microsoft Visual Studio Express Editions. Địa chỉ tải về: http://www.microsoft.com/express/
Thứ Tư, 9 tháng 2, 2011
Generation code, cũ nhưng mới...!
Từ lâu, chúng ta đã biết về generation code (gencode) qua nhiều ngôn ngữ lập trình như VB, VB.NET, C#, Java... đến cả các hệ quản trị cơ sở dữ liệu như Access, Oracle.. cũng có các chức năng tạo form.
Việc kéo thả các đối tượng như textbox, checkbox... với cách lập trình trực quan (visual) đã làm tăng tốc độ lâp trình đáng kể. Sau khi kéo thả, các đoạn code được sinh ra tương ứng với mỗi control được kéo vào. Ví dụ:
trong VS2008...
'
Việc gen code có nhiều khái niệm và cũng có nhiều cơ chế, mục đích khác nhau.
Ví dụ, một ngôn ngữ lập trình có trình biên dịch xử lý mã nguồn chương trình thành mã máy cũng gọi là gen code.
Bài viết này mục đích nói đến vấn đề gencode trong lập trình ứng dụng quản lý.
Các bạn có thể search với từ khóa: autocode, gencode... nhiều bài viết về nó, nhiều tools free ví dụ.
Ở đây, tôi xin đưa ra một số nguyên tắc gencode nhằm giúp các bạn tiếp cận dễ hơn với cách lâp trình nhanh gọn này.
1. Đầu tiên, các bạn phải xây dựng một vài lớp mẫu làm chuẩn. Thường chúng ta xây dựng theo mô hình 3 Tier/ 3Layer.
Nói chung, các kiểu này giúp chúng ta phân tách rõ ràng giữa việc truy cập dữ liệu với giao diện người dùng.
Có thể lấy làm mẫu sau:
a. Information|Value Object|...: là một lớp mapping (ánh xạ) từ table ở database qua.
Ví dụ:
#Region "Class Mapping of Table tblHang"
Public Class Class_tblHang_ValueObject
#Region "Vars"
Private MyVar_IdHang As Integer = 0
Private MyVar_TenHang As String = ""
Private MyVar_Serial As String = ""
Private MyVar_DonGia As Single = 0
Private MyVar_ThoiHanBaoHanh As String = ""
Private MyVar_TrangThai As String = CType("Chưa Bảo Hành", String)
Private MyVar_MoTa As String = ""
Private MyVar_IdNhaCungCap As Integer = 0
Private MyVar_ThoiHanBaoHanhNCC As String = ""
Private MyVar_IsActive As Boolean = True
#End Region
End Class
#End Region
Đó là một ví dụ cho 1 table tblHang với các column tương ứng.
Việc đảm bảo các thuộc tính cho các field ở table sẽ tùy theo thói quen của bạn mà xây dựng thêm để bổ sung.
b. Các bạn hãy xây dựng thêm một lớp nữa để xử lý các nghiệp vụ của table. Ở đây, tôi xin đưa 1 ví dụ nhỏ:
Imports System.Data.SqlClient
#Region "Class Mapping of Table tblHang"
Public Class Class_tblHang
#Region "Select All"
''' <summary>
''' Get All Rows in tblHang and return DalaTable
''' </summary>
Public Function Function_SelectAllRows() As DataTable
Dim _Query As String = String.Format("select * from [tblHang]")
Dim _SqlParameters As SqlParameter() = New SqlParameter() {}
Return MyVar_Connection.Function_ExecuteSelectQuery(_Query, _SqlParameters)
End Function
''' <summary>
''' Get All Rows in tblHang and return array Value Object
''' </summary>
Public Function Function_SelectAllValueObject() As Class_tblHang_ValueObject()
Dim _DataTable As DataTable
Dim _tblHang_ValueObject() As Class_tblHang_ValueObject
_DataTable = Me.Function_SelectAllRows
ReDim _tblHang_ValueObject(_DataTable.Rows.Count - 1)
If (_DataTable.Rows.Count > 0) Then
For _i As Integer = 0 To _DataTable.Rows.Count - 1
_tblHang_ValueObject(_i).ptyIdHang = CType(_DataTable.Rows(_i).Item("IdHang"), Integer)
_tblHang_ValueObject(_i).ptyTenHang = CType(_DataTable.Rows(_i).Item("TenHang"), String)
_tblHang_ValueObject(_i).ptySerial = CType(_DataTable.Rows(_i).Item("Serial"), String)
_tblHang_ValueObject(_i).ptyDonGia = CType(_DataTable.Rows(_i).Item("DonGia"), Single)
_tblHang_ValueObject(_i).ptyThoiHanBaoHanh = CType(_DataTable.Rows(_i).Item("ThoiHanBaoHanh"), String)
_tblHang_ValueObject(_i).ptyTrangThai = CType(_DataTable.Rows(_i).Item("TrangThai"), String)
_tblHang_ValueObject(_i).ptyMoTa = CType(_DataTable.Rows(_i).Item("MoTa"), String)
_tblHang_ValueObject(_i).ptyIdNhaCungCap = CType(_DataTable.Rows(_i).Item("IdNhaCungCap"), Integer)
_tblHang_ValueObject(_i).ptyThoiHanBaoHanhNCC = CType(_DataTable.Rows(_i).Item("ThoiHanBaoHanhNCC"), String)
_tblHang_ValueObject(_i).ptyIsActive = CType(_DataTable.Rows(_i).Item("IsActive"), Boolean)
Next
End If
Return (_tblHang_ValueObject)
End Function
#End Region
End Class
#End Region
Như các bạn thấy, ở đây có vài phương thức, giúp cho các bạn thực hiện thao tác truy vấn dữ liệu từ table.
c. Cuối cùng, ta xây dựng giao diện người dùng & code behind của nó...
Cái này, tùy vào mỗi bạn sẽ có thói quen khác nhau mà viết. Nhưng giống như mình đã nói ở đầu bài viết, việc tạo giao diện thế nào thì không nhắc đến, chỉ nói đến 1 điều là, bạn phải tuân thủ cú pháp giao diện của VS.NET. Code behind thì các bạn cố gắng xây dựng các mẫu thật tốt và đạt được khả năng đúng với nhiều trường hợp.
VD:
- đối với kiểu dữ liệu là char, nchar, varchar, nvarchar... thì bạn nên tạo ra control là textbox, textedit...
- đối với kiểu dữ liệu là numbers thì nên tạo control xử lý số: caledit, calbox...
- đối với kiểu dữ liệu là ngày tháng, bạn nên tạo control: dateedit, datecontrol....
...
Và cố gắng tùy chọn kích thước của control cho phù hợp với độ dài của dữ liệu.
Sắp xếp chúng, chọn fonts chữ cho hợp lý....
Ở đây, tôi có sẵn một module 3layer (đã bổ sung các điều kiện mới cho phù hợp) gồm 1 lớp mapping RO, 1 lớp bussiness, 2 form về quản lý & tạo mới đối tượng, các bạn có thể tải về để xem thử. Bên sau nó, có code xử lý được sinh tự động, theo một qui luật nhất định.
http://www.mediafire.com/?o9fnredlpepoeed
(Các bạn có thể view code của nó, nhưng để load giao diện, phải setup gói devexpress)
2. Từ các lớp mẫu đã có, các bạn xây dựng một qui luật cho việc tạo các lớp đó.
Cố gắng tạo càng bao quát càng tốt. Việc đó giúp cho bạn thoải mái trong việc lựa chọn kiểu dữ liệu của fields trong table, thoải mái trong việc xử dụng lại các lớp đã được sinh ra.
Như trong các file tôi đã up, có lớp Class_tblHang. Lớp đó gồm có rất nhiều hàm sẵn có, phục vụ được nhiều thao tác mà các bạn có thể cần để xử lý với table tblHang (các bạn xem lại các fields ở bên trên).
*Chú ý: các câu lệnh của tôi ít khi sử dụng thao tác với Store procedure. Nguyên nhân là vì nếu dùng SP tôi ít khi kiểm soát được code mình muốn viết.
Việc sử dụng sql query & SP là tùy vào bạn. Nhưng tôi thấy, kết hợp các công cụ, các kiểu lệnh lại là một lựa chọn phù hơn nhất.
"Đừng chú ý quá nhiều vào một điều gì đó, hãy nắm ý đừng nắm hình..."
Việc kéo thả các đối tượng như textbox, checkbox... với cách lập trình trực quan (visual) đã làm tăng tốc độ lâp trình đáng kể. Sau khi kéo thả, các đoạn code được sinh ra tương ứng với mỗi control được kéo vào. Ví dụ:
trong VS2008...
'
'cmdDelete
'
Me.cmdDelete.Appearance.Font = New System.Drawing.Font("Consolas", 9.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.cmdDelete.Appearance.Options.UseFont = True
Me.cmdDelete.Image = Global.tSFW.My.Resources.Resources.remove
Me.cmdDelete.Location = New System.Drawing.Point(673, 38)
Me.cmdDelete.Name = "cmdDelete"
Me.cmdDelete.Size = New System.Drawing.Size(195, 22)
Me.cmdDelete.StyleController = Me.LayoutControl1
Me.cmdDelete.TabIndex = 2
Me.cmdDelete.Text = "Xóa thông tin"
Việc gen code có nhiều khái niệm và cũng có nhiều cơ chế, mục đích khác nhau.
Ví dụ, một ngôn ngữ lập trình có trình biên dịch xử lý mã nguồn chương trình thành mã máy cũng gọi là gen code.
Bài viết này mục đích nói đến vấn đề gencode trong lập trình ứng dụng quản lý.
Các bạn có thể search với từ khóa: autocode, gencode... nhiều bài viết về nó, nhiều tools free ví dụ.
Ở đây, tôi xin đưa ra một số nguyên tắc gencode nhằm giúp các bạn tiếp cận dễ hơn với cách lâp trình nhanh gọn này.
1. Đầu tiên, các bạn phải xây dựng một vài lớp mẫu làm chuẩn. Thường chúng ta xây dựng theo mô hình 3 Tier/ 3Layer.
Nói chung, các kiểu này giúp chúng ta phân tách rõ ràng giữa việc truy cập dữ liệu với giao diện người dùng.
Có thể lấy làm mẫu sau:
a. Information|Value Object|...: là một lớp mapping (ánh xạ) từ table ở database qua.
Ví dụ:
#Region "Class Mapping of Table tblHang"
Public Class Class_tblHang_ValueObject
#Region "Vars"
Private MyVar_IdHang As Integer = 0
Private MyVar_TenHang As String = ""
Private MyVar_Serial As String = ""
Private MyVar_DonGia As Single = 0
Private MyVar_ThoiHanBaoHanh As String = ""
Private MyVar_TrangThai As String = CType("Chưa Bảo Hành", String)
Private MyVar_MoTa As String = ""
Private MyVar_IdNhaCungCap As Integer = 0
Private MyVar_ThoiHanBaoHanhNCC As String = ""
Private MyVar_IsActive As Boolean = True
#End Region
End Class
#End Region
Đó là một ví dụ cho 1 table tblHang với các column tương ứng.
Việc đảm bảo các thuộc tính cho các field ở table sẽ tùy theo thói quen của bạn mà xây dựng thêm để bổ sung.
b. Các bạn hãy xây dựng thêm một lớp nữa để xử lý các nghiệp vụ của table. Ở đây, tôi xin đưa 1 ví dụ nhỏ:
Imports System.Data.SqlClient
#Region "Class Mapping of Table tblHang"
Public Class Class_tblHang
#Region "Select All"
''' <summary>
''' Get All Rows in tblHang and return DalaTable
''' </summary>
Public Function Function_SelectAllRows() As DataTable
Dim _Query As String = String.Format("select * from [tblHang]")
Dim _SqlParameters As SqlParameter() = New SqlParameter() {}
Return MyVar_Connection.Function_ExecuteSelectQuery(_Query, _SqlParameters)
End Function
''' <summary>
''' Get All Rows in tblHang and return array Value Object
''' </summary>
Public Function Function_SelectAllValueObject() As Class_tblHang_ValueObject()
Dim _DataTable As DataTable
Dim _tblHang_ValueObject() As Class_tblHang_ValueObject
_DataTable = Me.Function_SelectAllRows
ReDim _tblHang_ValueObject(_DataTable.Rows.Count - 1)
If (_DataTable.Rows.Count > 0) Then
For _i As Integer = 0 To _DataTable.Rows.Count - 1
_tblHang_ValueObject(_i).ptyIdHang = CType(_DataTable.Rows(_i).Item("IdHang"), Integer)
_tblHang_ValueObject(_i).ptyTenHang = CType(_DataTable.Rows(_i).Item("TenHang"), String)
_tblHang_ValueObject(_i).ptySerial = CType(_DataTable.Rows(_i).Item("Serial"), String)
_tblHang_ValueObject(_i).ptyDonGia = CType(_DataTable.Rows(_i).Item("DonGia"), Single)
_tblHang_ValueObject(_i).ptyThoiHanBaoHanh = CType(_DataTable.Rows(_i).Item("ThoiHanBaoHanh"), String)
_tblHang_ValueObject(_i).ptyTrangThai = CType(_DataTable.Rows(_i).Item("TrangThai"), String)
_tblHang_ValueObject(_i).ptyMoTa = CType(_DataTable.Rows(_i).Item("MoTa"), String)
_tblHang_ValueObject(_i).ptyIdNhaCungCap = CType(_DataTable.Rows(_i).Item("IdNhaCungCap"), Integer)
_tblHang_ValueObject(_i).ptyThoiHanBaoHanhNCC = CType(_DataTable.Rows(_i).Item("ThoiHanBaoHanhNCC"), String)
_tblHang_ValueObject(_i).ptyIsActive = CType(_DataTable.Rows(_i).Item("IsActive"), Boolean)
Next
End If
Return (_tblHang_ValueObject)
End Function
#End Region
End Class
#End Region
Như các bạn thấy, ở đây có vài phương thức, giúp cho các bạn thực hiện thao tác truy vấn dữ liệu từ table.
c. Cuối cùng, ta xây dựng giao diện người dùng & code behind của nó...
Cái này, tùy vào mỗi bạn sẽ có thói quen khác nhau mà viết. Nhưng giống như mình đã nói ở đầu bài viết, việc tạo giao diện thế nào thì không nhắc đến, chỉ nói đến 1 điều là, bạn phải tuân thủ cú pháp giao diện của VS.NET. Code behind thì các bạn cố gắng xây dựng các mẫu thật tốt và đạt được khả năng đúng với nhiều trường hợp.
VD:
- đối với kiểu dữ liệu là char, nchar, varchar, nvarchar... thì bạn nên tạo ra control là textbox, textedit...
- đối với kiểu dữ liệu là numbers thì nên tạo control xử lý số: caledit, calbox...
- đối với kiểu dữ liệu là ngày tháng, bạn nên tạo control: dateedit, datecontrol....
...
Và cố gắng tùy chọn kích thước của control cho phù hợp với độ dài của dữ liệu.
Sắp xếp chúng, chọn fonts chữ cho hợp lý....
Ở đây, tôi có sẵn một module 3layer (đã bổ sung các điều kiện mới cho phù hợp) gồm 1 lớp mapping RO, 1 lớp bussiness, 2 form về quản lý & tạo mới đối tượng, các bạn có thể tải về để xem thử. Bên sau nó, có code xử lý được sinh tự động, theo một qui luật nhất định.
http://www.mediafire.com/?o9fnredlpepoeed
(Các bạn có thể view code của nó, nhưng để load giao diện, phải setup gói devexpress)
2. Từ các lớp mẫu đã có, các bạn xây dựng một qui luật cho việc tạo các lớp đó.
Cố gắng tạo càng bao quát càng tốt. Việc đó giúp cho bạn thoải mái trong việc lựa chọn kiểu dữ liệu của fields trong table, thoải mái trong việc xử dụng lại các lớp đã được sinh ra.
Như trong các file tôi đã up, có lớp Class_tblHang. Lớp đó gồm có rất nhiều hàm sẵn có, phục vụ được nhiều thao tác mà các bạn có thể cần để xử lý với table tblHang (các bạn xem lại các fields ở bên trên).
*Chú ý: các câu lệnh của tôi ít khi sử dụng thao tác với Store procedure. Nguyên nhân là vì nếu dùng SP tôi ít khi kiểm soát được code mình muốn viết.
Việc sử dụng sql query & SP là tùy vào bạn. Nhưng tôi thấy, kết hợp các công cụ, các kiểu lệnh lại là một lựa chọn phù hơn nhất.
"Đừng chú ý quá nhiều vào một điều gì đó, hãy nắm ý đừng nắm hình..."
Đăng ký:
Bài đăng (Atom)