<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msdnvietnam.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Duy Nguyen's Blog</title><link>http://msdnvietnam.net/blogs/duynb/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Cấu hình Remote Desktop trên Windows Azure</title><link>http://msdnvietnam.net/blogs/duynb/archive/2011/02/25/c-u-h-236-nh-remote-desktop-tr-234-n-windows-azure.aspx</link><pubDate>Fri, 25 Feb 2011 10:42:39 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7362</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7362</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2011/02/25/c-u-h-236-nh-remote-desktop-tr-234-n-windows-azure.aspx#comments</comments><description>&lt;p&gt;&lt;em&gt;(Bài viết này áp dụng với Windows Azure Tools 1.3 for Visual Studio 2010)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Hiện nay, Windows Azure cho phép sử dụng dịch vụ Remote Desktop để truy cập vào các roles chạy trên Windows Azure. Để cấu hình tính năng này, chúng ta sẽ sử dụng Visual Studio để cấu hình cho các project. Bài viết này sẽ hướng dẫn cho các bạn cách thức sử dụng Visual Studio đế cấu hình dịch vụ Remote Desktop với Windows Azure. &lt;/p&gt;  &lt;p&gt;Để có thể cấu hình dịch vụ Remote Desktop, chúng ta cần một project Windows Azure có ít nhất một role (web role hoặc worker role) trong project.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 1: &lt;/strong&gt;Publish project Windows Azure bằng cách tại cửa sổ Solution Explorer, chọn &lt;strong&gt;Publish &lt;/strong&gt;trên menu như hình sau&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_23B874A7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_4C170B21.png" width="583" height="289" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 2: &lt;/strong&gt;Tại cửa sổ Deploy Windows Azure project, chọn phương thức thực hiện là “&lt;strong&gt;Deploy your Windows Azure project to Windows Azure&lt;/strong&gt;” và tiếp tục cấu hình các thông số để có thể thực hiện deploy project lên Windows Azure.&lt;/p&gt;  &lt;p&gt;Tiếp theo, chọn vào mục &lt;strong&gt;Config Remote Desktop connection… &lt;/strong&gt;ở phía dưới&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_7C5DDFD7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_2F4D703F.png" width="454" height="428" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 3: &lt;/strong&gt;Trong cửa sổ &lt;strong&gt;Remote Desktop Configuration &lt;/strong&gt;chúng ta sẽ tiếp tục cấu hình các thông tin về tài khoản dùng để sử dụng dịch vụ Remote Desktop cũng như cấu hình certificate để chứng thực các thông tin tài khoản đó.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Tạo certificate cho thông tin về tài khoản: &lt;/em&gt;&lt;/strong&gt;Trong cửa số Remote Desktop Configuation, chọn &lt;strong&gt;Create &lt;/strong&gt;như hình bên dưới để tạo certificate mới cho tài khoản Remote Desktop&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_0C3CFECF.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_2B4FF5E2.png" width="646" height="425" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Điền tên cho certificate và bấm &lt;strong&gt;OK.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_2528A947.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_15396483.png" width="379" height="172" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 4: &lt;/strong&gt;Tạo file certificate để upload lên Windows Azure&lt;/p&gt;  &lt;p&gt;Tại cửa sổ Remote Destop Configuration sau khi đã tạo thành công certificate, chọn vào &lt;strong&gt;View&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_5A71BBAC.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_5135806B.png" width="429" height="426" /&gt;&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;Tại tab Details, chọn vào &lt;strong&gt;Copy to File…&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_6E5B2875.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_18E6E386.png" width="423" height="525" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Trong hộp thoại &lt;strong&gt;Certificate Export Wizard, &lt;/strong&gt;chọn vào mục &lt;strong&gt;Yes, export the private key&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_0C49109D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_3A06B395.png" width="517" height="470" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; Tiếp tục cung cấp thông tin ở các bước tiếp theo và lưu file certificate.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 5: &lt;/strong&gt;Upload file certificate lên Windows Azure&lt;/p&gt;  &lt;p&gt;Tại trang quản lý Management Portal, chọn vào Hosted Services thích hợp và chọn &lt;strong&gt;Add Certificate&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_127FC15E.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_0575BB80.png" width="811" height="334" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Chọn certificate và nhập password của certificate và chọn &lt;strong&gt;Create&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_2373C974.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_1B0FF41D.png" width="508" height="269" /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;&lt;strong&gt;BƯỚC 6: &lt;/strong&gt;Quay trở lại cửa sổ Remote Desktop Configuration của Visual Studio và cung cấp các thông tin về tài khoản dùng Remote Desktop, sau đó chọn &lt;strong&gt;OK&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_4AEA95DE.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_36189D5E.png" width="429" height="426" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 7: &lt;/strong&gt;Tại cửa sổ Deploy Windows Azure project, chọn &lt;strong&gt;OK &lt;/strong&gt;để bắt đầu quá trình deploy project lên Windows Azure.&lt;/p&gt;  &lt;p&gt;Quá trình deploy Windows Azure project &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_7431B80F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_5265DF7E.png" width="945" height="220" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Sau khi đã deploy thành công, chúng ta sẽ thấy dịch vụ Remote Desktop sẽ được mở tại Management Portal của Windows Azure như sau&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_4DA9596A.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_3411A670.png" width="799" height="364" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tại đây, người dùng có thể thay đổi các thông tin về tài khoản Remote Desktop như thay đổi mật khẩu, thay đổi ngày hết hạn của tài khoản …&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SỬ DỤNG REMOTE DESKTOP&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_131E33C9.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_4C549ABE.png" width="778" height="330" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_223B4263.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_38ADE0EA.png" width="448" height="369" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Chú ý: Đôi khi user name phải sử dụng theo cấu trúc &lt;strong&gt;.\username&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7362" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/Windows+Azure/default.aspx">Windows Azure</category></item><item><title>Quản lý logins trên SQL Azure</title><link>http://msdnvietnam.net/blogs/duynb/archive/2011/02/25/qu-n-l-253-logins-tr-234-n-sql-azure.aspx</link><pubDate>Fri, 25 Feb 2011 02:26:59 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7361</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7361</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2011/02/25/qu-n-l-253-logins-tr-234-n-sql-azure.aspx#comments</comments><description>&lt;p&gt;Bài viết này sẽ hướng dẫn các bạn quản lý các logins và phân quyền cho các user tương ứng với các logins cho từng database trên SQL Azure.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 1: &lt;/strong&gt;Kết nối đến &lt;strong&gt;master &lt;/strong&gt;database bằng tài khoản admin của SQL Azure. Việc kết nối đến &lt;strong&gt;master&lt;/strong&gt; database có thế thực hiện trên development portal hoặc thông qua SQL Management Studio 2008 R2.&lt;/p&gt;  &lt;p&gt;Khi đã kết nối đến &lt;strong&gt;master&lt;/strong&gt; database, chúng ta có thể sử dụng các command như CREATE LOGIN, ALTER LOGIN hoặc DROP LOGIN cho việc tạo, sửa hoặc xóa các logins cho SQL Azure.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 2: &lt;/strong&gt;Tạo login mới trên SQL Azure bằng command như sau:     &lt;br /&gt;&lt;em&gt;CREATE LOGIN ‘loginname’ WITH password=’&amp;lt;loginpassword&amp;gt;’&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Chú ý &lt;/em&gt;rằng &amp;lt;loginpassword&amp;gt; phải đáp ứng đầy đủ các chính sách về độ phức tạp của mật khẩu, các bạn có thể xem thêm các chính sách này ở tại đây &lt;a title="Strong Passwords" href="http://go.microsoft.com/fwlink/?LinkId=154152"&gt;Strong Passwords&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 3: &lt;/strong&gt;Khởi tạo database mới (bước này có thể bỏ qua). Việc tạo database mới có thể thực hiện với development portal của SQL Azure hoặc thông qua SQL Management Studio 2008 R2.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 4: &lt;/strong&gt;Kết nối đến database mới vừa được tạo (chú ý kết nối bằng tài khoản login được dùng để tạo ra database)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 5: &lt;/strong&gt;Khởi tạo tài khoản user trong database cho login trên như sau:     &lt;br /&gt;&lt;em&gt;CREATE USER username FROM LOGIN loginname      &lt;br /&gt;(Chú ý, &lt;/em&gt;ở vị trí &lt;em&gt;username &lt;/em&gt;và &lt;em&gt;loginname &lt;/em&gt;sẽ không có dấu ‘’ )&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;BƯỚC 6: &lt;/strong&gt;Phân quyền cho user vừa tạo ở trên bằng cách gán cho user bằng role thích hợp     &lt;br /&gt;&lt;em&gt;EXEC sp_addrolemember ‘&amp;lt;role&amp;gt;’, ‘username’&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Đối với SQL Azure, các role ở mức database sẽ tương tự như đối với các role có sẵn trong SQL Server 2008 ( có thể xem thêm ở đây &lt;a title="http://msdn.microsoft.com/en-us/library/ms189121.aspx" href="http://msdn.microsoft.com/en-us/library/ms189121.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms189121.aspx&lt;/a&gt;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7361" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/SQL+Azure/default.aspx">SQL Azure</category></item><item><title>Imagine Cup Việt Nam 2011 đã khởi động tại trường Đại học CNTT</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/11/11/imagine-cup-vi-t-nam-2011-227-kh-i-ng-t-i-tr-ng-i-h-c-cntt.aspx</link><pubDate>Thu, 11 Nov 2010 07:04:00 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7237</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7237</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/11/11/imagine-cup-vi-t-nam-2011-227-kh-i-ng-t-i-tr-ng-i-h-c-cntt.aspx#comments</comments><description>&lt;p&gt;Vào sáng ngày 9/10/2010, Microsoft và CLB Sáng tạo CNTT - ITIClub tại trường ĐH CNTT đã tổ chức chương trình giới thiệu cuộc thi Imagine Cup 2011 Việt Nam đến với các bạn sinh viên trong trường. Buổi giới thiệu đã thu hút gần 200 sinh viên đến tham dự.&lt;/p&gt;  &lt;p&gt;Nội dung chương trình: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Giới thiệu về cuộc thi Imagine Cup 2011.      &lt;ul&gt;       &lt;li&gt;Nội dung: giới thiệu cuộc thi Imagine Cup 2011 – cuộc thi công nghệ hàng đầu thế giới dành cho sinh viên với các hạng mục tham dự phong phú. &lt;/li&gt;        &lt;li&gt;Người trình bày: Nguyễn Bảo Duy – Microsoft Student Partner Lead. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Chia sẻ kinh nghiệm tham gia Imagine Cup.      &lt;ul&gt;       &lt;li&gt;Nội dung: chia sẻ kinh nghiệm tham gia Software Design - Imagine Cup năm 2009 &lt;/li&gt;        &lt;li&gt;Người trình bày: Trần Thị Thanh Hương – Microsoft Student Partner. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Life runs on code:      &lt;ul&gt;       &lt;li&gt;Nội dung:          &lt;ul&gt;           &lt;li&gt;Giới thiệu về nền tảng phát triển ứng dụng Microsoft® .NET Framework 4.0. &lt;/li&gt;            &lt;li&gt;Tổng quan về lập trình hướng đối tượng với C#. &lt;/li&gt;            &lt;li&gt;Khai thác sức mạnh bộ công cụ phát triển ứng dụng trên Visual Studio 2010. &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;        &lt;li&gt;Người trình bày: Trần Xuân Chiến – Microsoft Student Partner. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Buổi giới thiệu đã nhận được sự hưởng ứng tích cực từ các bạn sinh viên, mở đầu cho chuỗi training công nghệ sắp tới được tổ chức tại trường.&lt;/p&gt;  &lt;p&gt;Một số hình ảnh tại buổi giới thiệu: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1329_5F00_5AE49902.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DSCF1329" border="0" alt="DSCF1329" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1329_5F00_thumb_5F00_4D5E3A62.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1337_5F00_4271334D.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DSCF1337" border="0" alt="DSCF1337" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1337_5F00_thumb_5F00_50DC09A5.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7237" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/MSP/default.aspx">MSP</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>ASP.NET MVC 2 Training</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/11/07/asp-net-mvc-2-training.aspx</link><pubDate>Sun, 07 Nov 2010 03:14:09 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7226</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7226</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/11/07/asp-net-mvc-2-training.aspx#comments</comments><description>&lt;p&gt;Vào sáng thứ 7, ngày 6 tháng 11 năm 2010 vừa qua, tại văn phòng Microsoft Vietnam, HCM đã diễn ra buổi training về ASP.NET MVC 2 dành cho các bạn Microsoft Student Partners trong địa bàn TP HCM.&lt;/p&gt;  &lt;p&gt;Nội dung được trình bày bởi bạn &lt;a href="https://tndhuy.wordpress.com/"&gt;Nguyễn Trần Đức Huy&lt;/a&gt; – Microsoft Student Partner đến từ trường đại học Khoa Tự Nhiên.&lt;/p&gt;  &lt;p&gt;Buổi training với nội dung xoay việc tìm hiểu về ASP.NET MVC 2 cũng như cách để xây dựng&amp;#160; một ứng dụng web CRUD nhanh chóng và hiệu quả bằng việc sử dụng ASP.NET MVC 2. Nội dung cụ thể như sau:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Tìm hiểu về ASP.NET MVC&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd381412.aspx"&gt;Tìm hiểu về mô hình MVC (Model – View – Controller)&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;&lt;a href="http://www.asp.net/mvc/videos/understanding-models-views-and-controllers"&gt;Tìm hiểu về các thành phần Models, Views, Controllers trong ASP.NET MVC&lt;/a&gt; (Videos)&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd381619.aspx"&gt;Sự khác nhau giữa ASP.NET Web Form và ASP.NET MVC&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Hướng dẫn xây dựng một ứng dụng web CRUD&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;Hướng dẫn xây dựng ứng dụng web tại buổi training&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;Phần 1 &lt;a title="http://bit.ly/9loBp1 " href="http://bit.ly/9loBp1%20"&gt;http://bit.ly/9loBp1 &lt;/a&gt;&lt;/li&gt;        &lt;li&gt;Phần 2 &lt;a title="http://bit.ly/9sL2vZ " href="http://bit.ly/9sL2vZ%20"&gt;http://bit.ly/9sL2vZ &lt;/a&gt;&lt;/li&gt;        &lt;li&gt;Mã nguồn &lt;a title="http://bit.ly/cwL57H " href="http://bit.ly/cwL57H%20"&gt;http://bit.ly/cwL57H &lt;/a&gt;&lt;/li&gt;     &lt;/ul&gt;      &lt;li&gt;Video hướng dẫn xây dựng các ứng dụng web bằng ASP.NET MVC 2&lt;/li&gt;      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://www.asp.net/mvc/videos/creating-a-movie-database-application-in-15-minutes-with-aspnet-mvc"&gt;Xây dựng ứng dụng Task List&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a href="http://www.asp.net/mvc/samples/mvc-music-store"&gt;Xây dựng ứng dụng Music Store&lt;/a&gt;&lt;/li&gt;     &lt;/ul&gt;   &lt;/ol&gt; &lt;/ol&gt;  &lt;p&gt;Một số tài nguyên:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Slide trình bày tại training &lt;a title="http://bit.ly/dj34mE " href="http://bit.ly/dj34mE%20"&gt;http://bit.ly/dj34mE &lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7226" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/MSP/default.aspx">MSP</category></item><item><title>Imagine Cup Resource for MSPs</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/11/03/imagine-cup-resource-for-msps.aspx</link><pubDate>Wed, 03 Nov 2010 07:45:47 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7218</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7218</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/11/03/imagine-cup-resource-for-msps.aspx#comments</comments><description>&lt;p&gt;For Microsoft Student Partners in Vietnam, there are&amp;#160; some resources for you that can use in your Imagine Cup 2011 event&lt;/p&gt;  &lt;p&gt;1. Imagine Cup 2011 Banner: &lt;a href="http://msdnvietnam.net/media/p/7215.aspx"&gt;http://msdnvietnam.net/media/p/7215.aspx&lt;/a&gt; or &lt;a title="http://bit.ly/aWNa0z " href="http://bit.ly/aWNa0z%20"&gt;http://bit.ly/aWNa0z &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. Imagine Cup 2011 Brochure: &lt;a title="http://bit.ly/dwZFqh " href="http://bit.ly/dwZFqh%20"&gt;http://bit.ly/dwZFqh &lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7218" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/MSP/default.aspx">MSP</category></item><item><title>Cộng đồng phát triển ứng dụng cho Windows Phone 7</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/11/02/c-ng-ng-ph-225-t-tri-n-ng-d-ng-cho-windows-phone-7.aspx</link><pubDate>Mon, 01 Nov 2010 16:42:10 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7213</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7213</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/11/02/c-ng-ng-ph-225-t-tri-n-ng-d-ng-cho-windows-phone-7.aspx#comments</comments><description>&lt;p&gt;Như mọi người cũng đã nghe rất nhiều thông tin về hệ điều hành mới nhất của Microsoft dành cho các thiết bị di động là Windows Phone 7. Windows Phone 7 không chỉ là một hệ điều hành mới nhất dành cho các thiết bị di động, mà Windows Phone 7 còn cung cấp một nền tảng cho các nhà phát triển xây dựng nên các ứng dụng chạy trên nền Windows Phone 7.&lt;/p&gt;  &lt;p&gt;Windows Phone 7 được xây dựng dựa trên nền tảng các công nghệ rất quen thuộc như &lt;a href="http://msdn.microsoft.com/en-us/library/w0x726c2.aspx" target="_blank"&gt;.NET Framework&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb404700(VS.95).aspx" target="_blank"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/bb200104.aspx" target="_blank"&gt;XNA Game Studio 4&lt;/a&gt;. Các nhà phát triển ứng dụng sẽ rất quen thuộc với các kỹ năng đang có khi chuyển sang xây dựng các ứng dụng cho Windows Phone 7. Không dừng lại ở đó, công cụ phát triển ứng dụng cho WP7 cũng rất thân thuộc, đó là bộ công cụ phát triển ứng dụng chuyên nghiệp &lt;a href="http://www.microsoft.com/visualstudio/en-us/" target="_blank"&gt;Visual Studio 2010&lt;/a&gt;, &lt;a href="http://www.microsoft.com/expression/products/blend_overview.aspx" target="_blank"&gt;Expression Blend 4&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://spicialistsblog.wordpress.com/"&gt;Windows Phone Community&amp;#39;s Blog&lt;/a&gt; là một nơi rất đáng để ghé thăm, đây là một nơi chia sẽ rất nhiều nguồn tài nguyên bằng Tiếng Việt, các bài hướng dẫn chi tiết, các bài viết hay về Windows Phone 7.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://imaginecup.com/upload/Hero_Graphics/Windows7.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;Và các bạn tin rằng ứng dụng do mình viết ra có thể làm thay đổi cả thế giới? Tại sao các bạn không mang sản phẩm của mình tham gia vào cuộc thi &lt;a href="http://imaginecup.com/" target="_blank"&gt;Imagine Cup 2011&lt;/a&gt; ở nội dung &lt;a href="http://imaginecup.com/competitions/windows-phone-7" target="_blank"&gt;Windows Phone 7&lt;/a&gt; để giành lấy những tấm vé đến thành phố New York, Hoa Kỳ để tham dự vòng chung kết? &lt;/p&gt;  &lt;p&gt;Hãy đăng ký ngay hôm nay tại &lt;a href="http://imaginecup.com/register"&gt;http://imaginecup.com/register&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7213" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category></item><item><title>Chương trình training công nghệ mới Microsoft dành cho sinh viên</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/10/24/ch-ng-tr-236-nh-training-c-244-ng-ngh-m-i-microsoft-d-224-nh-cho-sinh-vi-234-n.aspx</link><pubDate>Sun, 24 Oct 2010 07:56:07 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7190</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7190</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/10/24/ch-ng-tr-236-nh-training-c-244-ng-ngh-m-i-microsoft-d-224-nh-cho-sinh-vi-234-n.aspx#comments</comments><description>&lt;p&gt;Vào 2 ngày 23 và 24 vừa qua, Microsoft và CLB Live Science tại trường Đại học Khoa Tự Nhiên đã tổ chức chương trình training công nghệ mới Microsoft dành cho sinh viên. Chương trình đã thu hút hàng trăm sinh viên đến từ các trường đại học trong địa bàn TP HCM.&lt;/p&gt;  &lt;p&gt;Nội dung chương trình:&lt;/p&gt;  &lt;h3&gt;Ngày 1:&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Tiếp cận nền tảng công nghệ .NET Framework 4.0 và bộ công cụ phát triển ứng dụng Visual Studio 2010&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;&lt;i&gt;Giới thiệu về nền tảng công nghệ .NET Frameword 4.0 mới nhất của Microsoft.            &lt;br /&gt;&lt;/i&gt;&lt;i&gt;Ngôn ngữ C# 4.0 cùng các tính năng mới, C# và lập trình hướng đối tượng.            &lt;br /&gt;&lt;/i&gt;&lt;i&gt;Khai thác bộ công cụ phát triển ứng dụng Visual Studio 2010 (coding, debugging, …)&lt;/i&gt; &lt;/li&gt;        &lt;li&gt;&lt;em&gt;Trình bày:            &lt;br /&gt;Nguyễn Bảo Duy – &lt;a href="http://msdnvietnam.net/blogs/duynb/" target="_blank"&gt;Microsoft Student Partner Lead&lt;/a&gt;             &lt;br /&gt;&lt;a href="http://chienuit.wordpress.com/" target="_blank"&gt;Trần Xuân Chiến&lt;/a&gt; – Microsoft Student Partner Candidate at University of IT, HCMC VNU&lt;/em&gt; &lt;/li&gt;        &lt;li&gt;&lt;em&gt;Tài nguyên:&lt;/em&gt;           &lt;ul&gt;           &lt;li&gt;&lt;em&gt;&lt;a href="http://cid-06fa25cc4e99c490.office.live.com/self.aspx/.Public/2010%5E_10%5E_StudentTraining%5E_NETFramework%5E_public.pdf" target="_blank"&gt;Slide deck&lt;/a&gt;&lt;/em&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=180977"&gt;NET Framework 4&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/sc65sadd.aspx"&gt;Debugging in Visual Studio&lt;/a&gt; &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Giới thiệu nền tảng công nghệ Web của Microsoft        &lt;br /&gt;Tiếp cận xây dựng ứng dụng Web trên ASP.NET MVC 2&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;&lt;i&gt;Giới thiệu về nền tảng các công nghệ Web của Microsoft.            &lt;br /&gt;&lt;/i&gt;&lt;i&gt;Tiếp cận với mô hình phát triển ứng dụng Web hiện đại MVC sử dụng thư viện ASP.NET MVC 2&lt;/i&gt; &lt;/li&gt;        &lt;li&gt;&lt;em&gt;Trình bày:            &lt;br /&gt;Lê Dương Công Phúc – Microsoft Student Partner at Hoa Sen University             &lt;br /&gt;Lê Đức Nam – Microsoft Student Partner Candidate at Ton Duc Thang University&lt;/em&gt; &lt;/li&gt;        &lt;li&gt;&lt;em&gt;Tài nguyên: &lt;/em&gt;          &lt;ul&gt;           &lt;li&gt;&lt;em&gt;&lt;a href="http://cid-06fa25cc4e99c490.office.live.com/self.aspx/.Public/2010%5E_10%5E_StudentTraining%5E_BuildingRichWebApp.pdf" target="_blank"&gt;Slide deck&lt;/a&gt;&lt;/em&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/ff380144.aspx" target="_blank"&gt;Microsoft Web Development&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/s57a598e.aspx" target="_blank"&gt;What&amp;#39;s new in ASP.NET 4 and Visual Web Developemnt&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd394709.aspx" target="_blank"&gt;ASP.NET MVC 2&lt;/a&gt; &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Ngày 2&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Tiếp cận phát triển nền tảng dữ liệu với Microsoft SQL Server 2008 R2&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;&lt;i&gt;Tìm hiểu tổng quan cơ bản về Microsoft SQL Server 2008 R2 bao gồm những tính năng mới, các dịch vụ phân tích, báo cáo mạnh mẽ được cung cấp sẵn, khả năng hỗ trợ các loại dữ liệu đặc biệt, …&lt;/i&gt; &lt;/li&gt;        &lt;li&gt;&lt;em&gt;Trình bày:            &lt;br /&gt;&lt;a href="http://kyphong88.wordpress.com/" target="_blank"&gt;Lê Ngọc Kỳ Phong&lt;/a&gt; – Microsoft Student Partner at Ton Duc Thang University&lt;/em&gt; &lt;/li&gt;        &lt;li&gt;&lt;em&gt;Tài nguyên&lt;/em&gt;           &lt;ul&gt;           &lt;li&gt;&lt;em&gt;&lt;a href="http://cid-06fa25cc4e99c490.office.live.com/self.aspx/.Public/SQLServer2008R2%5E_MSPSeminar%5E_Oct%5E_FY11.pdf" target="_blank"&gt;Slide deck&lt;/a&gt;&lt;/em&gt; &lt;/li&gt;            &lt;li&gt;&lt;em&gt;&lt;a href="http://msdnvietnam.net/media/p/7191.aspx" target="_blank"&gt;Source code demo&lt;/a&gt;&lt;/em&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb500435.aspx" target="_blank"&gt;What&amp;#39;s new in SQL Server 2008 R2&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/xee70aty.aspx" target="_blank"&gt;Working with Database Projects&lt;/a&gt; &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Phát triển ứng dụng tương tác cao với bộ công cụ Microsoft Expression Studio 4&lt;/strong&gt;       &lt;ul&gt;       &lt;li&gt;&lt;i&gt;Sử dụng bộ công cụ Microsoft Expression Studio 4 để xây dựng các ứng dụng mang tính tương tác với người dung cao – khả năng design hình ảnh, animation, layout, … cho các ứng dụng từ client đến các ứng dụng Silverlight&lt;/i&gt; &lt;/li&gt;        &lt;li&gt;&lt;em&gt;Trình bày:            &lt;br /&gt;Trần Thị Thanh Hương – Microsoft Student Partners at University of IT, HCMC VNU&lt;/em&gt; &lt;/li&gt;        &lt;li&gt;&lt;em&gt;Tài nguyên:&lt;/em&gt;           &lt;ul&gt;           &lt;li&gt;&lt;em&gt;&lt;a href="http://cid-06fa25cc4e99c490.office.live.com/self.aspx/.Public/2010%5E_10%5E_StudentTraining%5E_Expression%20Studio%204%20.pdf" target="_blank"&gt;Slide deck&lt;/a&gt;&lt;/em&gt; &lt;/li&gt;         &lt;/ul&gt;       &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="https://profile.microsoft.com/RegSysProfileCenter/wizard.aspx?wizid=99d67e3e-74ee-4a6c-99e7-492b30f3d2f2&amp;amp;" target="_blank"&gt;&lt;img src="http://msdnvietnam.net/cfs-filesystemfile.ashx/__key/CommunityServer.Components.SiteFiles/banners/msdn_5F00_fb_5F00_viet.gif" alt="" /&gt;&lt;/a&gt;     &lt;br /&gt;Đăng ký bản tin công nghệ MSDN Vietnam để nhận cập nhật thông tin công nghệ mới nhất hàng tháng.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Một số hình ảnh tại buổi training&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1216_5F00_52566D9E.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DSCF1216" border="0" alt="DSCF1216" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1216_5F00_thumb_5F00_30F6C802.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1220_5F00_172291D3.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DSCF1220" border="0" alt="DSCF1220" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1220_5F00_thumb_5F00_4D440A22.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1232_5F00_4C6BA438.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DSCF1232" border="0" alt="DSCF1232" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1232_5F00_thumb_5F00_2458F519.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1240_5F00_1F76415D.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DSCF1240" border="0" alt="DSCF1240" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1240_5F00_thumb_5F00_4F50E31E.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1252_5F00_7F97B7D4.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DSCF1252" border="0" alt="DSCF1252" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1252_5F00_thumb_5F00_732994AB.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1256_5F00_6B31F249.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="DSCF1256" border="0" alt="DSCF1256" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/DSCF1256_5F00_thumb_5F00_5C1B136F.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7190" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/MSP/default.aspx">MSP</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/Training+lab/default.aspx">Training lab</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/WPF/default.aspx">WPF</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Windows Server 2008 R2 Training Workshop for MSP</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/10/22/windows-server-2008-r2-training-workshop-for-msp.aspx</link><pubDate>Thu, 21 Oct 2010 16:21:25 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7186</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7186</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/10/22/windows-server-2008-r2-training-workshop-for-msp.aspx#comments</comments><description>&lt;p&gt;Vào ngày 21 tháng 10, tại văn phòng Microsoft đã diễn ra buổi training tổng quan về Windows Server 2008 R2 dành cho các bạn Microsoft Student Partners đến từ các trường đại học. &lt;/p&gt;  &lt;p&gt;Tại buổi training, &lt;a href="http://hoangho.wordpress.com/"&gt;MVP Candidate Ho Nguyen&lt;/a&gt; đã giới thiệu các tính năng mới trong Windows Server 2008 R2 như&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Active Directory Domain Services" href="http://technet.microsoft.com/en-us/library/cc770946(WS.10).aspx"&gt;Active Directory Domain Services&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Hyper-V" href="http://technet.microsoft.com/en-us/library/cc753637(WS.10).aspx"&gt;Hyper-V&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="DirectAccess" href="http://technet.microsoft.com/en-us/network/dd420463.aspx"&gt;DirectAccess&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;… &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Cùng với Ho Nguyen, MSP Candidate Thuan Nguyen (từ Đại học Hoa Sen) cũng đã chia sẽ một số khái niệm về hệ thống khi làm việc với Windows Server 2008 R2&lt;/p&gt;  &lt;p&gt;Song song đó là các câu hỏi về khả năng mở rộng, tính ổn định, độ sẵn sàng, tính an toàn, … của hệ thống khi có các yêu cầu cập nhật, thay đổi … &lt;/p&gt;  &lt;p&gt;Một số hình ảnh tại buổi training&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0160_5F00_190BD909.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0160" border="0" alt="SP_A0160" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0160_5F00_thumb_5F00_67ACC8DB.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0163_5F00_5CBFC1C6.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0163" border="0" alt="SP_A0163" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0163_5F00_thumb_5F00_19F050C1.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0168_5F00_4186A71E.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0168" border="0" alt="SP_A0168" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0168_5F00_thumb_5F00_7E4B0323.jpg" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0154_5F00_0C59CC54.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0154" border="0" alt="SP_A0154" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0154_5F00_thumb_5F00_1E926D49.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0155_5F00_0B71409D.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0155" border="0" alt="SP_A0155" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0155_5F00_thumb_5F00_23F0B820.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0158_5F00_3488B30E.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0158" border="0" alt="SP_A0158" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0158_5F00_thumb_5F00_7E46EF24.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0164_5F00_64068600.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0164" border="0" alt="SP_A0164" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0164_5F00_thumb_5F00_6432E368.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0165_5F00_36651AA3.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0165" border="0" alt="SP_A0165" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0165_5F00_thumb_5F00_67E0626B.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0167_5F00_5F7C8D14.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SP_A0167" border="0" alt="SP_A0167" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/SP_5F00_A0167_5F00_thumb_5F00_3112E19A.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Các bạn nào không tham dự được buổi training này có thể download slide deck tại đây &lt;a title="http://bit.ly/bjKBvO " href="http://bit.ly/bjKBvO%20"&gt;http://bit.ly/bjKBvO &lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7186" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/MSP/default.aspx">MSP</category></item><item><title>CheckedListBox với WPF</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/10/20/checkedlistbox-v-i-wpf.aspx</link><pubDate>Wed, 20 Oct 2010 15:37:49 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7177</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7177</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/10/20/checkedlistbox-v-i-wpf.aspx#comments</comments><description>&lt;p&gt;Có thể nói CheckedListBox là một trong những control thuộc họ ListBox khá phổ biến và được nhiều người sử dụng, nếu không sử dụng control CheckedListBox của Windows Form thì chúng ta phải xây dựng một custom control. &lt;/p&gt;  &lt;p&gt;Ngày nay, Windows Presentation Foundation được lựa chọn khá nhiều khi xây dựng các ứng dụng trên desktop. Và không may mắn là trên WPF lại không có control CheckedListBox. Tuy nhiên, WPF đã được trang bị một tính năng gọi là Template (PanelTemplate, ItemTemplate, DataTemplate, …), tính năng này là một trong những tính năng đã đem lại sức mạnh cho WPF trong việc customize các control một cách cực kỳ dễ dàng và nhanh chóng.&lt;/p&gt;  &lt;p&gt;Nếu như mọi người cần sử dụng CheckedListBox trong WPF, sau khi search một vòng qua các trang web mọi người sẽ dễ dàng tìm ra được một giải pháp để xây dựng CheckedListBox trong WPF như sau:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6ebdd175-da83-41cf-a59e-14597cb3e14b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;white-space:nowrap;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;leftListBox&amp;quot;&lt;/span&gt;                  &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#ff0000;"&gt; IsSynchronizedWithCurrentItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#ff0000;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;6,28,6,6&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#ff0000;"&gt; SelectionMode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Multiple&amp;quot;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#a31515;"&gt;            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CheckBox&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;2&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; IsChecked&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=IsSelected,&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=TwoWay}&amp;quot;&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding}&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Và sau khi thử qua, chắc chắn rằng kết quả sẽ gây thất vọng! Vì mặc dù đã checked vào checkbox nhưng thật sự thì các item trong listbox vẫn chưa được chọn!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_3347BFB9.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_3849FD68.png" width="408" height="294" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Chúng ta có thể xem qua cấu trúc tổ chức để được các item là các CheckBox trong ListBox trên&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_36993194.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_0E868275.png" width="358" height="266" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Chúng ta thấy rằng rõ ràng CheckBox không phải là children trực tiếp của ListBoxItem, đồng thời khi quy định thuộc tính binding cho CheckBox và không quy định rõ tìm đến element nào ở trong đoạn code trên nên kết quả không thu được như ý muốn.&lt;/p&gt;  &lt;p&gt;Để giải quyết vấn đề này, chúng ta cần quy định chi tiết hơn cho thuộc tính binding như sau&lt;/p&gt;  &lt;p&gt;   &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3656235b-aeca-491d-8733-202aa734a76c" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;white-space:nowrap;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;:&lt;/span&gt;&lt;span style="color:#ff0000;"&gt;Name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;leftListBox&amp;quot;&lt;/span&gt;                  &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#ff0000;"&gt; IsSynchronizedWithCurrentItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#ff0000;"&gt; Grid.Column&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;6,28,6,6&amp;quot;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#ff0000;"&gt; SelectionMode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Multiple&amp;quot;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#a31515;"&gt;            &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;CheckBox&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Margin&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;2&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li&gt;                     &lt;span style="color:#ff0000;"&gt; IsChecked&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; Mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=TwoWay,&lt;/span&gt; &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                                         &lt;span style="color:#ff0000;"&gt; RelativeSource&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;={&lt;/span&gt;&lt;span style="color:#a31515;"&gt;RelativeSource&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; FindAncestor&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;,&lt;/span&gt;&lt;span style="color:#ff0000;"&gt; AncestorType&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=ListBoxItem},&lt;/span&gt; &lt;/li&gt; &lt;li&gt;                                         &lt;span style="color:#ff0000;"&gt; Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=IsSelected}&amp;quot;&lt;/span&gt; &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                     &lt;span style="color:#ff0000;"&gt; Content&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Binding}&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;/&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#a31515;"&gt;        &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#a31515;"&gt;    &lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;                        &lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/p&gt;  &lt;p&gt;Và kết quả thu được sẽ như ý muốn như sau&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_78BC9A17.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_0B911DC2.png" width="425" height="303" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7177" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/WPF/default.aspx">WPF</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Convert int number to binary, octal, hex number with C#</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/10/14/convert-int-number-to-binary-octal-hex-number-with-c.aspx</link><pubDate>Thu, 14 Oct 2010 06:49:50 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7155</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7155</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/10/14/convert-int-number-to-binary-octal-hex-number-with-c.aspx#comments</comments><description>&lt;p&gt;I posted an article at my WordPress blog about using C# and .NET library to convert int number to binary, octal or hex number.&lt;/p&gt;  &lt;p&gt;It’s very simple and you can read fully post at &lt;a title="Permanent Link to Convert int to binary, octal, hex number very easily" href="http://nbaoduy.wordpress.com/2010/10/10/convert-int-to-binary-octal-hex-number-very-easily/"&gt;Permanent Link to Convert int to binary, octal, hex number very easily&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7155" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Dynamic Programming với C# 4.0 (Phần 2)</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/10/03/dynamic-programming-v-i-c-4-0-ph-n-2.aspx</link><pubDate>Sun, 03 Oct 2010 07:01:00 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7112</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7112</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/10/03/dynamic-programming-v-i-c-4-0-ph-n-2.aspx#comments</comments><description>&lt;h6&gt;&lt;a href="http://msdnvietnam.net/blogs/duynb/archive/2010/09/25/dynamic-programming-v-i-c-4-0-part-1.aspx"&gt;Dynamic Programming với C# 4.0 (Part 1)&lt;/a&gt;&lt;/h6&gt;  &lt;p&gt;Trong phần 2 này, tôi sẽ tiếp tục giới thiệu về việc dynamic programming trong C# 4.0 thông qua việc sử dụng các đối tượng đặc biệt như DynamicObject, ExpandoObject.&lt;/p&gt;  &lt;p&gt;Như tôi đã trình bày ở phần 1, khi sử dụng keyword &lt;strong&gt;&lt;em&gt;dynamic&lt;/em&gt;&lt;/strong&gt; trong C# thì tất cả các truy cập properties hoặc gọi các methods sẽ được DLR (Dynamic Language Runtime) tự động quản lý việc truy cập vào các properties hoặc thực thi các methods được gọi. Nếu trong quá trình thực hiện, nếu DLR không tìm thấy các properties hoặc methods cần thiết thì DLR sẽ sinh ra các exception. Tuy nhiên, chúng ta hoàn toàn có khả năng can thiệp vào quá trình này, thay vì để DLR tự động thực hiện các công việc này, chúng ta sẽ thực hiện việc quyết định những việc gì sẽ làm đối với các truy cập properties hoặc thực thi methods của các object được sử dụng với keyword &lt;strong&gt;&lt;em&gt;dynamic&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;h2&gt;Làm việc với DynamicObject&lt;/h2&gt;  &lt;p&gt;DynamicObject là một class đặc biệt trong namespace System.Dynamic. Để có thể sử dụng được class DynamicObject, chúng ta không thể tạo ra các đối tượng trực tiếp từ class này mà bắt buộc chúng phải định nghĩa một class khác thừa kế từ class DynamicObject.&lt;/p&gt;  &lt;p&gt;Class DynamicObject cho phép chúng ta định nghĩa các thao tác trên một đối tượng được khai báo với keyword dynamic và các thao tác đó sẽ được thực thi như thế nào. Cụ thể ở đây là chúng ta sẽ không để DLR tự động thực hiện công việc tìm và thực thi một cách tự động các thao tác mà chúng ta sẽ quy định các thao tác gì sẽ xảy ra nếu có truy cập vào các proterties, thực thi methods hoặc gọi các toán tử, v.v…&lt;/p&gt;  &lt;p&gt;Để có thể sử dụng khả năng này, trong C# chúng ta bắt buộc phải sử dụng keyword &lt;strong&gt;&lt;em&gt;dynamic&lt;/em&gt;&lt;/strong&gt; đối với các đối tượng của class DynamicObject.&lt;/p&gt;  &lt;p&gt;Bởi vì class DynamicObject không cho phép chúng ta hiện thực các đối tượng trực tiếp, do đó chúng ta bắt buộc phải thực hiện việc định nghĩa một class được thừa kế từ DynamicObject và override các phương thức cần thiết.&lt;/p&gt;  &lt;p&gt;Note: &lt;em&gt;Khi định nghĩa một class thừa kế từ DynamicObject, chúng ta vẫn thực hiện các thao tác như việc định nghĩa một class thông thường, có nghĩa là việc định nghĩa các properties, các phương thức là hoàn toàn hợp lệ. Chỉ khác ở một điểm là khi chúng ta truy cập vào các proterties hoặc gọi các methods thì đầu CLR sẽ thực hiện tìm thành phần phù hợp, nếu không tìm thấy thì lúc này DLR mới gọi đến các phương thức mà chúng ta đã override để thực hiện các thao tác mà chúng ta quy định.&lt;/em&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:34d3fa50-4039-4841-9f17-c611c43d7765" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicObject&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;IDynamicMetaObjectProvider&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; DynamicObject();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;IEnumerable&lt;/span&gt;&amp;lt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;&amp;gt; GetDynamicMemberNames();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicMetaObject&lt;/span&gt; GetMetaObject(&lt;span style="color:#2b91af;"&gt;Expression&lt;/span&gt; parameter);&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryBinaryOperation(&lt;span style="color:#2b91af;"&gt;BinaryOperationBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; arg, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryConvert(&lt;span style="color:#2b91af;"&gt;ConvertBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result);&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryCreateInstance(&lt;span style="color:#2b91af;"&gt;CreateInstanceBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] args, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryDeleteIndex(&lt;span style="color:#2b91af;"&gt;DeleteIndexBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] indexes);&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryDeleteMember(&lt;span style="color:#2b91af;"&gt;DeleteMemberBinder&lt;/span&gt; binder);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryGetIndex(&lt;span style="color:#2b91af;"&gt;GetIndexBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] indexes, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result);&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryGetMember(&lt;span style="color:#2b91af;"&gt;GetMemberBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryInvoke(&lt;span style="color:#2b91af;"&gt;InvokeBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] args, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result);&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryInvokeMember(&lt;span style="color:#2b91af;"&gt;InvokeMemberBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] args, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TrySetIndex(&lt;span style="color:#2b91af;"&gt;SetIndexBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] indexes, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; value);&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TrySetMember(&lt;span style="color:#2b91af;"&gt;SetMemberBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; value);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryUnaryOperation(&lt;span style="color:#2b91af;"&gt;UnaryOperationBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result);&lt;/li&gt; &lt;li&gt;    &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Ở đây tôi sẽ giới thiệu qua chức năng của một số phương thức nổi bật&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;TryBinaryOperation&lt;/strong&gt;: Phương thức này cho phép chúng ta quy định các thao tác liên quan đến các toán tử như +, –, *, /, … &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;TryConvert&lt;/strong&gt;: Phương thức này cho phép chúng ta quy định các thao tác liên quan đến việc chuyển đổi kiểu dữ liệu. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;TryGetMember&lt;/strong&gt; và &lt;strong&gt;TrySetMember&lt;/strong&gt;: Các phương thức này cho phép chúng ta quy định các thao tác liên quan đến việc truy cập (bao gồm cả việc get và set) các properties của đối tượng. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;TryInvokeMember&lt;/strong&gt;: Các phương thức này cho phép chúng ta quy định các thao tác liên quan đến việc gọi, thực thi các methods. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Tôi sẽ minh hoạt các phương thức trên sẽ làm việc như thế nào thông qua một ví dụ rất đơn giản như sau&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:aa60493d-8536-4498-abc9-6efb5d77ffc4" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DemoDynamic&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;DynamicObject&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Name { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryBinaryOperation(&lt;span style="color:#2b91af;"&gt;BinaryOperationBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; arg, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;You have called &amp;quot;&lt;/span&gt; + binder.Operation.ToString() + &lt;span style="color:#a31515;"&gt;&amp;quot; operator.&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        result = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryConvert(&lt;span style="color:#2b91af;"&gt;ConvertBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;You have convert from DemoDynamic to &amp;quot;&lt;/span&gt; + binder.ReturnType.ToString());&lt;/li&gt; &lt;li&gt;        result = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryGetMember(&lt;span style="color:#2b91af;"&gt;GetMemberBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;You have tried to get &amp;quot;&lt;/span&gt; + binder.Name + &lt;span style="color:#a31515;"&gt;&amp;quot; member.&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        result = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TrySetMember(&lt;span style="color:#2b91af;"&gt;SetMemberBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; value)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;You have tried to set &amp;quot;&lt;/span&gt; + binder.Name + &lt;span style="color:#a31515;"&gt;&amp;quot; member.&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;            &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;override&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; TryInvokeMember(&lt;span style="color:#2b91af;"&gt;InvokeMemberBinder&lt;/span&gt; binder, &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt;[] args, &lt;span style="color:#0000ff;"&gt;out&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; result)&lt;/li&gt; &lt;li&gt;    {&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;You have tried to invoke &amp;quot;&lt;/span&gt; + binder.Name + &lt;span style="color:#a31515;"&gt;&amp;quot; member.&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li&gt;        result = &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Ở đây, tôi chỉ đơn giản là sẽ xuất ra màn hình console những thao tác mà tôi tác động lên object.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2c69e284-cdcb-4370-857e-866be2b31c6e" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;dynamic&lt;/span&gt; demoDyn = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DemoDynamic&lt;/span&gt;();    &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; str = (&lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;)demoDyn; &lt;span style="color:#008000;"&gt;// Type conversation&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;demoDyn.Age = 21; &lt;span style="color:#008000;"&gt;// Set member&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; age = demoDyn.Age; &lt;span style="color:#008000;"&gt;// Get member            &lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;demoDyn.Sing(); &lt;span style="color:#008000;"&gt;// Invoke member;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;demoDyn += 5; &lt;span style="color:#008000;"&gt;// Operator&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Và kết quả tôi nhận được khi thực hiện các thao trên đối với object demoDyn như sau&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_6672A207.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_70C3C667.png" width="547" height="162" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7112" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Dynamic Programming với C# 4.0 (Part 1)</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/10/01/dynamic-programming-v-i-c-4-0-part-1.aspx</link><pubDate>Fri, 01 Oct 2010 07:02:00 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7083</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7083</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/10/01/dynamic-programming-v-i-c-4-0-part-1.aspx#comments</comments><description>&lt;p&gt;Một trong những tính năng mới nổi bật nhất trong .NET Framework 4.0 là hỗ trợ khả năng dynamic programming trong C# 4.0. &lt;/p&gt;  &lt;p&gt;Ngôn ngữ lập trình là một ngôn ngữ thuần hướng đối tượng ngay từ những phiên bản đầu tiên 1.0, 2.0. Đến phiên bản 3.0, ngôn ngữ lập trình C# được bổ sung các tính năng của một ngôn ngữ lập trình hướng thủ tục (functional programming). Tiếp tục phát triển ở phiên bản 4.0, ngôn ngữ lập trình C# được bổ sung các tính năng mạnh mẽ của một ngôn ngữ lập trình dynamic (dynamic programming).&lt;/p&gt;  &lt;h1&gt;Sử dụng kiểu &lt;em&gt;dynamic&lt;/em&gt;&lt;/h1&gt;  &lt;p&gt;Để sử dụng kiểu dynamic trong C# 4.0, chúng ta có thể sử dụng keyword &lt;em&gt;&lt;strong&gt;dynamic&lt;/strong&gt;&lt;/em&gt;. Giả sử tôi có một class ví dụ sau:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6a400371-a510-439b-b2ef-b354755a11ae" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Aircraft&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; AircraftName { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Fly()&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;The aircraft &amp;quot;&lt;/span&gt; + AircraftName + &lt;span style="color:#a31515;"&gt;&amp;quot; is flying.&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Đây là một class Aircraft được định nghĩa bao gồm AircraftName property và Fly() method. Tôi sẽ tiến hành sử dụng class này với nhiều cách khác nhau như sau&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_7EF418A5.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_43C03CDA.png" width="518" height="138" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Với cách sử dụng thông thường như trên, nếu chúng ta cố gắng truy cập các properties hoặc gọi các phương thức không tồn tại trong định nghĩa class. Đây là bản chất của ngôn ngữ C# vốn là một statically typed language, tất cả mọi truy cập properties hoặc methods đều được kiểm tra tại compile time.&lt;/p&gt;  &lt;p&gt;Và nếu tôi sử dụng keyword &lt;strong&gt;&lt;em&gt;var&lt;/em&gt;&lt;/strong&gt; – một tính năng trong C# 3.0 thì kết quả sẽ như thế nào?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_6E2C6DF7.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_74734485.png" width="385" height="140" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Và kết quả là chúng ta vẫn nhận được các compile error tương tự như trên. Ở đây, việc sử dụng &lt;strong&gt;&lt;em&gt;var &lt;/em&gt;&lt;/strong&gt;chỉ là một hình thức rút gọn của cách sử dụng ở trên.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_33D0F816.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_5A32DB61.png" width="469" height="144" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Tuy nhiên, khi sử dụng&lt;strong&gt;&lt;em&gt; dynamic&lt;/em&gt;&lt;/strong&gt; thì chúng ta sẽ không còn nhận được các lỗi compile errors như ở trên. Như vậy, đối với các kiểu dynamic, compiler sẽ bỏ qua việc kiểm tra tính hợp lệ của các truy cập properties hoặc methods tại thời điểm compile time. Tất cả các truy cập này sẽ được resolve tại thời điểm run-time.&lt;/p&gt;  &lt;p&gt;Đó là sự khác biệt đầu tiên của việc sử dụng &lt;strong&gt;&lt;em&gt;dynamic &lt;/em&gt;&lt;/strong&gt;là khi sử dụng, compiler sẽ bỏ qua việc kiểm tra tính hợp lệ trong các truy vập properties hoặc methods. Nếu như không sử dụng dynamic, thì chắc chắn rằng nếu các truy cập vi phạm tính hợp lệ thì chương trình sẽ không được compile thành công, trong khi nếu sử dụng dynamic thì cho dù chúng ta có thực hiên các truy cập vi phạm tính hợp lệ, chương trình vẫn được compile thành công.&lt;/p&gt;  &lt;p&gt;Khi sử dụng &lt;strong&gt;&lt;em&gt;dynamic&lt;/em&gt;&lt;/strong&gt;, tất cả các truy cập properties hoặc methods đều sẽ được resolve tại run-time. Nếu như các truy cập của chúng ta vi phạm tính hợp lệ thì chương trình của chúng ta vẫn sẽ nhận các lỗi thông báo về các vi phạm đó. Cụ thể trong ví dụ trên, khi truy cập vào property Color hoặc gọi method TakeOff() đều vi phạm bởi vì chúng vẫn chưa được định nghĩa. Mặc dù chương trình trên vẫn được compile thành công, nhưng khi chạy chương trình thì chúng ta sẽ nhận lỗi như sau&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_19908EF2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_03C6A695.png" width="460" height="246" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Một điểm khác biệt nữa giữa việc sử dụng &lt;strong&gt;&lt;em&gt;dynamic&lt;/em&gt;&lt;/strong&gt; và &lt;strong&gt;&lt;em&gt;var&lt;/em&gt;&lt;/strong&gt; như sau&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:041b3386-55ae-4764-b7b8-4684a10d7dea" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; stObj = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Aircraft&lt;/span&gt;();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#008000;"&gt;// After this declaration, stObj&amp;#39;s type is Aircraft&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#008000;"&gt;// and you cannot change its type&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;stObj = 14; &lt;span style="color:#008000;"&gt;// cause compile-time error&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#0000ff;"&gt;dynamic&lt;/span&gt; dynObj = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Aircraft&lt;/span&gt;();&lt;/li&gt; &lt;li&gt;&lt;span style="color:#008000;"&gt;// After this declaration, dynObj&amp;#39;s type is Aircraft&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Type of dynObj is &amp;quot;&lt;/span&gt; + dynObj.GetType());&lt;/li&gt; &lt;li&gt;dynObj = 13;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&lt;span style="color:#008000;"&gt;// But after this, dynObj&amp;#39;s type is System.Int32&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;Type of dynObj is &amp;quot;&lt;/span&gt; + dynObj.GetType());&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Và nếu tôi chạy đoạn chương trình trên thì kết quả của tôi rõ ràng là tôi có thể dễ dàng thay đổi type của các đối tượng dynamic&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_30DB9363.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_36B636FC.png" width="519" height="151" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Vậy một câu hỏi sẽ được đặt ra là &lt;strong&gt;Khi sử dụng dynamic thì tôi được lợi ích gì? Tôi sẽ được lợi gì khi mà tất cả mọi vi phạm của tôi đều được bỏ qua tại thời điểm compile-time và cuối cùng rằng chương trình cũng vẫn bị lỗi?&lt;/strong&gt;&lt;/p&gt;  &lt;h1&gt;Một số scenario sử dụng dynamic&lt;/h1&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;1. Sử dụng với Anonymous type&lt;/h3&gt;  &lt;p&gt;Anonymous types là một tính năng đã có mặt trong C# từ phiên bản 3.0, tính năng này cho phép chúng ta khai báo và sử dụng ngay lập tức một kiểu dữ liệu mà không cần có tên của kiểu dữ liệu cũng như phải định nghĩa một cách bài bản cho kiểu dữ liệu đó.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:88949e9b-42a2-4469-a919-20f35bf987cf" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;var&lt;/span&gt; customer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; { FirsName = &lt;span style="color:#a31515;"&gt;&amp;quot;Duy&amp;quot;&lt;/span&gt;, &lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                     LastName = &lt;span style="color:#a31515;"&gt;&amp;quot;Nguyen&amp;quot;&lt;/span&gt;,&lt;/li&gt; &lt;li&gt;                     Email = &lt;span style="color:#a31515;"&gt;&amp;quot;nbaoduy@live.com&amp;quot;}&lt;/span&gt;;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Ở đây, tôi có một object được khai báo bằng cách sử dụng anonymous type. Và trong chương trình của tôi, tôi cũng sử dụng nhiều anonymous type khác nữa và hầu như các anonymous type của tôi đều sẽ có một property là Email.&lt;/p&gt;  &lt;p&gt;Vậy bây giờ làm sao có thể viết một method để in property Email ra console khi mà tôi không hề biết tên của kiểu dữ liệu khi sử dụng anonymouse type?&lt;/p&gt;  &lt;p&gt;Ở đây, giải pháp đầu tiên là sử dụng một kỹ thuật có tên là reflection.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1c35e31b-21c2-4ceb-99c2-9f4dccf376c7" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; PrintEmail(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; obj)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(obj.GetType()&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;                         .GetProperty(&lt;span style="color:#a31515;"&gt;&amp;quot;Email&amp;quot;&lt;/span&gt;)&lt;/li&gt; &lt;li&gt;                         .GetValue(obj, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;));&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Với việc sử dụng kỹ thuật reflection như ví dụ trên, chúng ta sẽ thấy rằng sẽ mức độ thực hiện là rất phức tạp và khả năng xảy ra sai sót sẽ rất cao.&lt;/p&gt;  &lt;p&gt;Tuy nhiên, để đơn giản đi, chúng ta sẽ sử dụng &lt;strong&gt;&lt;em&gt;dynamic&lt;/em&gt;&lt;/strong&gt; như sau&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3ed8e008-725e-4b00-8e25-d219fdd595e4" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; PrintEmail(&lt;span style="color:#0000ff;"&gt;dynamic&lt;/span&gt; obj)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(obj.Email);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Method PrintEmail của chúng ta bây giờ đã thay đổi là chúng ta đưa vào 1 object có kiểu là dynamic. Khi đó, trong thân của method, chúng ta sẽ truy cập đến property Email một cách dễ dàng mà không mắc phải lỗi kiểm tra của compiler.&lt;/p&gt;  &lt;h3&gt;2. Thực hiện cùng một công việc trên nhiều kiểu dữ liệu khác nhau&amp;#160; &lt;br /&gt;(Thanks Buu Nguyen for this scenario)&lt;/h3&gt;  &lt;p&gt;Trong class Aircraft được tôi định nghĩa ở trên có một method là Fly(). Giả sử rằng bây giờ trong chương trình của tôi lại có một class Bird như sau&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0e8a12d3-f40f-48e1-abf5-aacb92c918f1" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Bird&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; BirdName { &lt;span style="color:#0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color:#0000ff;"&gt;set&lt;/span&gt;; }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Fly()&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    {&lt;/li&gt; &lt;li&gt;        &lt;span style="color:#2b91af;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#a31515;"&gt;&amp;quot;The bird &amp;quot;&lt;/span&gt; + BirdName + &lt;span style="color:#a31515;"&gt;&amp;quot; is flying.&amp;quot;&lt;/span&gt;);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    }&lt;/li&gt; &lt;li&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Trong trường hợp này, tôi muốn rằng tôi có thể viết một method duy nhất để gọi method Fly() trong cả 2 class Aircraft và Bird, hoặc tổng quát hơn nữa là có thể gọi được tất cả những class nào có định nghĩa phương thức Fly().&lt;/p&gt;  &lt;p&gt;Trước đây, có rất nhiều giải pháp để giải quyết vấn đề này, tuy nhiên các giải pháp này đều khá phức tạp và tốn rất nhiều thời gian và công sức nhưng kết quả đôi khi lại không như mong muốn. &lt;/p&gt;  &lt;p&gt;Giải pháp đầu tiên là sử dụng kỹ thuật reflection như tôi đã ví dụ ở trong scenario trên, chỉ khác ở chỗ thay vì truy cập property thì chúng sẽ invoke member.&lt;/p&gt;  &lt;p&gt;Giải pháp thứ 2, giải pháp này mang tính “pattern” hơn là định nghĩa 1 interface IFlyable trong đó có method Fly(). Sau đó chúng ta implement interface này cho các class cần thiết. Như vậy với cách này, chúng ta thấy rằng về mặt kỹ thuật tuy không quá phức tạp, nhưng về khối lượng công việc phải thực hiện là rất nhiều, phải thực hiện chỉnh sửa khá nhiều. Khi đó, phương thức cần thực hiện của tôi sẽ như sau&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ea861f1d-4ead-4105-b36f-ecfb61b17888" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; LetFly(&lt;span style="color:#2b91af;"&gt;IFlyable&lt;/span&gt; flyableObject)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    flyableObject.Fly();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&lt;em&gt;Tuy nhiên, với việc sử dụng &lt;strong&gt;dynamic&lt;/strong&gt;, chúng ta sẽ thấy rằng công việc bây giờ lại trở nên rất đơn giản – không phải sử dụng kỹ thuật reflection, không phải định nghĩa một interface mới và hoàn toàn không cần phải thực hiện bất kỳ thay đổi nào trong code đã có sẵn. Method LetFly sẽ được thay đổi lại như sau&lt;/em&gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:25ff47e1-71d4-4041-bbc3-41d51a2c13ac" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;static&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; LetFly(&lt;span style="color:#0000ff;"&gt;dynamic&lt;/span&gt; flyableObject)&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;{&lt;/li&gt; &lt;li&gt;    flyableObject.Fly();&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;}&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h2&gt;&amp;#160;&lt;/h2&gt;  &lt;h2&gt;Một số hạn chế khi sử dụng dynamic&lt;/h2&gt;  &lt;ul&gt;   &lt;li&gt;Nếu các thành phần của một class như properties, methods được khai báo là private hoặc protected thì dynamic object sẽ không gọi được đến các thành phần đó. &lt;/li&gt;    &lt;li&gt;Nếu một object được khai báo là dynamic thì object đó sẽ không gọi được đến các extension methods &lt;/li&gt;    &lt;li&gt;Các dynamic object sẽ không thể gọi đến các methods được đánh dấu là static &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Nếu bạn nào có những scenario sử dụng dynamic khác thì có thể để lại comment ở phía dưới.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7083" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>Giới thiệu về nền tảng phát triển Web của Microsoft</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/09/24/gi-i-thi-u-v-n-n-t-ng-ph-225-t-tri-n-web-c-a-microsoft.aspx</link><pubDate>Thu, 23 Sep 2010 16:33:00 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7068</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7068</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/09/24/gi-i-thi-u-v-n-n-t-ng-ph-225-t-tri-n-web-c-a-microsoft.aspx#comments</comments><description>&lt;h1&gt;Giới thiệu về Microsoft Web Platform&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_5CC3ACCE.png"&gt;&lt;img height="254" width="448" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_090033B3.png" align="right" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Microsoft Web Platform l&amp;agrave; một nền tảng cung cấp một giải ph&amp;aacute;p to&amp;agrave;n diện cho việc x&amp;acirc;y dựng, ph&amp;aacute;t triển, vận h&amp;agrave;nh v&amp;agrave; quản l&amp;yacute; c&amp;aacute;c ứng dụng tr&amp;ecirc;n nền web.&lt;/p&gt;
&lt;p align="justify"&gt;Microsoft Web Platform được x&amp;acirc;y dựng tr&amp;ecirc;n nền tảng của họ Windows Server c&amp;ugrave;ng với dịch vụ Internet Information Services mang lại một m&amp;aacute;y chủ web đầy sức mạnh, cung cấp khả năng quản l&amp;yacute;, vận h&amp;agrave;nh c&amp;aacute;c ứng dụng web một c&amp;aacute;ch linh hoạt v&amp;agrave; hiệu quả.&lt;/p&gt;
&lt;p align="justify"&gt;M&amp;aacute;y chủ cơ sở dữ liệu Microsoft SQL Server mang lại khả năng lưu trữ mạnh mẽ v&amp;agrave; an to&amp;agrave;n cho c&amp;aacute;c ứng dụng web với khối lượng v&amp;agrave; lưu lượng dữ liệu lớn. B&amp;ecirc;n cạnh đ&amp;oacute;, MS SQL Server c&amp;ograve;n cung c&amp;aacute;c dịch vụ kh&amp;aacute;c như Reporting Services, Analysis Services, Integration Services, &amp;hellip;&lt;/p&gt;
&lt;p align="justify"&gt;L&amp;agrave; một th&amp;agrave;nh phần rất nổi bật trong .NET Framework, ADO.NET Entity Framework mang lại một phương ph&amp;aacute;p hiệu quả nhất cho việc &amp;aacute;nh xạ giữa dữ liệu từ c&amp;aacute;c cơ sở dữ liệu quan hệ đến c&amp;aacute;c đối tượng trong ứng dụng. Phi&amp;ecirc;n bản mới nhất hiện nay của ADO.NET EF được cung cấp trong .NET Framework 4.0 được hỗ trợ rất nhiều t&amp;iacute;nh năng như ORM (Object-relational Mapping), l&amp;agrave;m việc với Store Procedures, Functions, &amp;hellip; gi&amp;uacute;p giảm thiểu tối đa c&amp;aacute;c c&amp;ocirc;ng việc tương t&amp;aacute;c với cơ sở dữ liệu kh&amp;ocirc;ng cần thiết khi x&amp;acirc;y dựng một ứng dụng web.&lt;/p&gt;
&lt;p align="justify"&gt;Microsoft cung cấp thư viện ASP.NET với hai m&amp;ocirc; h&amp;igrave;nh ph&amp;aacute;t triển ứng dụng web kh&amp;aacute; phổ biến hiện nay l&amp;agrave; Web Forms v&amp;agrave; MVC. B&amp;ecirc;n cạnh việc tập trung hỗ trợ về nền tảng x&amp;acirc;y dựng, ph&amp;aacute;t triển, vận h&amp;agrave;nh v&amp;agrave; quản l&amp;yacute; c&amp;aacute;c ứng dụng, Microsoft c&amp;ograve;n cung cấp một số thư viện hỗ trợ kh&amp;aacute;c như Ajax Control Toolkit, jQuery, &amp;hellip; nhằm n&amp;acirc;ng cao tối đa trải nghiệm về ph&amp;iacute;a người d&amp;ugrave;ng đầu cuối cho c&amp;aacute;c ứng dụng web.&lt;/p&gt;
&lt;p align="justify"&gt;Về c&amp;ocirc;ng cụ ph&amp;aacute;t triển c&amp;aacute;c ứng dụng web, Visual Studio 2010 l&amp;agrave; một giải ph&amp;aacute;p ph&amp;aacute;t triển ứng dụng to&amp;agrave;n diện với rất nhiều t&amp;iacute;nh năng mạnh mẽ, n&amp;acirc;ng cao t&amp;iacute;nh cộng t&amp;aacute;c trong quy tr&amp;igrave;nh ph&amp;aacute;t triển ứng dụng. B&amp;ecirc;n cạnh Visual Studio 2010, Microsoft c&amp;ograve;n đưa ra c&amp;aacute;c sản phẩm kh&amp;aacute;c với t&amp;iacute;nh năng đơn giản hơn nhưng vẫn mang lại t&amp;iacute;nh năng chuy&amp;ecirc;n nghiệp như Web Matrix, Expression Web&lt;/p&gt;
&lt;h2&gt;Giới thiệu về Microsoft Web Installer (Web PI)&lt;/h2&gt;
&lt;p&gt;Web PI l&amp;agrave; một c&amp;ocirc;ng cụ miễn ph&amp;iacute; v&amp;agrave; nhỏ gọn được cung cấp nhằm gi&amp;uacute;p cho việc download v&amp;agrave; c&amp;agrave;i đặt c&amp;aacute;c ứng dụng trong Microsoft Web Platform một c&amp;aacute;ch nhanh ch&amp;oacute;ng v&amp;agrave; dễ d&amp;agrave;ng. C&amp;aacute;c ứng dụng trong Microsoft Web Platform bao gồm cả server, c&amp;aacute;c dịch vụ, c&amp;ocirc;ng cụ ph&amp;aacute;t triển, frameworks v&amp;agrave; c&amp;aacute;c ứng dụng web.&lt;/p&gt;
&lt;p&gt;Microsoft Web PI được cung cấp tại địa chỉ &lt;a href="http://www.microsoft.com/web/downloads/platform.aspx" title="http://www.microsoft.com/web/downloads/platform.aspx"&gt;http://www.microsoft.com/web/downloads/platform.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_4B239C36.png"&gt;&lt;img height="479" width="644" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_14199830.png" alt="image" border="0" title="image" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;C&amp;aacute;c ứng dụng được cung cấp miễn ph&amp;iacute; th&amp;ocirc;ng qua &lt;a href="http://www.microsoft.com/web/gallery/"&gt;Windows Web Application Gallery&lt;/a&gt;. B&amp;ecirc;n cạnh c&amp;aacute;c ứng dụng web được x&amp;acirc;y dựng tr&amp;ecirc;n nền tảng Microsoft Web Platform như Umbraco, DotNetNuke, &amp;hellip; Windows Web Application Gallery c&amp;ograve;n cung cấp c&amp;aacute;c ứng dụng web kh&amp;aacute;c tr&amp;ecirc;n nền PHP v&amp;agrave; MySQL như WordPress, Jomla!, Moodle, &amp;hellip; Tất cả được tải về v&amp;agrave; c&amp;agrave;i đặt ho&amp;agrave;n to&amp;agrave;n tự động.&lt;/p&gt;
&lt;p&gt;Đ&amp;acirc;y l&amp;agrave; một video demo việc c&amp;agrave;i đặt ứng dụng WordPress tr&amp;ecirc;n local được thực hiện th&amp;ocirc;ng qua ứng dụng Web PI. (Chọn chất lượng 720p v&amp;agrave; xem full screen để xem được chi tiết)&lt;/p&gt;
&lt;p&gt;(Please visit the site to view this media)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7068" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/.NET/default.aspx">.NET</category><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/Web/default.aspx">Web</category></item><item><title>Thông báo bảo mật quan trọng của Microsoft cho ASP.NET</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/09/20/th-244-ng-b-225-o-b-o-m-t-quan-tr-ng-c-a-microsoft-cho-asp-net.aspx</link><pubDate>Sun, 19 Sep 2010 18:46:59 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7050</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7050</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/09/20/th-244-ng-b-225-o-b-o-m-t-quan-tr-ng-c-a-microsoft-cho-asp-net.aspx#comments</comments><description>&lt;p&gt;Vào ngày 17 tháng 9 vừa qua, Microsoft đã đưa ra một cảnh báo quan trọng đối với một điểm yếu trong ASP.NET tại &lt;a title="http://www.microsoft.com/technet/security/advisory/2416728.mspx" href="http://www.microsoft.com/technet/security/advisory/2416728.mspx"&gt;http://www.microsoft.com/technet/security/advisory/2416728.mspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lỗ hổng này sẽ cho phép các hacker khai thác nhằm tấn công vào các ứng dụng ASP.NET, cụ thể như sau&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Các hacker có thể thông qua điểm yếu này để download trực tiếp các tập tin trong ứng dụng ASP.NET, như tập tin web.config – đây là một tập tin rất quan trọng của một ứng dụng ASP.NET khi mà các thông tin nhạy cảm được lưu trữ ở đây (như connection string, authentication information, ….)&lt;/li&gt;    &lt;li&gt;Các hacker khi khai thác được lỗ hổng này có thể thực hiện việc giải mã các dữ liệu đã được mã hóa được gửi đi từ phía client (như các dữ liệu được lưu trữ trong ViewState)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Nguyên tắc hoạt động: Các hacker sẽ dựa trên nguyên tắc dự đoán dữ liệu sẽ được mã hóa như thế nào từ các lỗi nhận được từ phía server. Ở đây, cơ chế giống như việc trả lời một câu hỏi dựa trên việc trả lời hàng loạt các câu hỏi gợi ý khác nhau liên quan đến câu hỏi. Các hacker sẽ gửi nhiều lần và liên tục các dữ liệu cố ý gây lỗi để nhận được các lỗi tương ứng được trả lại từ phía server, từ đó tìm hiểu được phương thức mã hóa dữ liệu tương ứng.&lt;/p&gt;  &lt;h3&gt;Phương án giải quyết&lt;/h3&gt;  &lt;p&gt;Để có thể giải quyết các điểm yếu do lỗ hổng này gây ra, các nhà phát triển phát triển web có thể thực hiện các phương án sau&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Bật tính năng &amp;lt;customErrors&amp;gt; trong ứng dụng và đảm bảo rằng khi ứng dụng xảy ra lỗi thì ứng dụng sẽ được chuyển đến &lt;strong&gt;một trang thông báo lỗi duy nhất&lt;/strong&gt;. Bằng phương án, các hacker sẽ không thể theo dõi được các lỗi khác nhau của ứng dụng.&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Đối với các ứng dụng sử dụng ASP.NET 3.5 trở xuống&lt;/h3&gt;  &lt;p&gt;Cần tùy chỉnh tập tin web.config như sau để bật tính năng &amp;lt;customErrors&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7d41f60f-0cc6-41ea-ae33-346d75d4dc30" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;customErrors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;On&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;defaultRedirect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;~/error.html&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;h3&gt;Đối với các ứng dụng sử dụng ASP.NET 3.5SP1 hoặc 4.0&lt;/h3&gt;  &lt;p&gt;Cần tùy chỉnh tập tin web.config như sau để bật tính năng &amp;lt;customErrors&amp;gt;&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e822a6cd-6378-4e0e-98cc-98e57f6fda8b" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2em;padding:0 0 0 5px;"&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;customErrors&lt;/span&gt;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;On&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;redirectMode&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;ResponseRewrite&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; &lt;/span&gt;&lt;span style="color:#ff0000;"&gt;defaultRedirect&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt;~/error.aspx&lt;/span&gt;&amp;quot;&lt;span style="color:#0000ff;"&gt; /&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;system.web&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;li&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;configuration&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;Trong đó, nội dung của các trang error.html hoặc error.aspx là tùy ý.&lt;/p&gt;  &lt;p&gt;Bên cạnh đó, Microsoft cũng đề xuất nội dung của trang error.aspx nên được sử dụng như sau&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9049e7fe-4c30-4af0-8f4c-dbb6838e069f" class="wlWriterEditableSmartContent"&gt; &lt;div style="border:#000080 1px solid;color:#000;font-family:&amp;#39;Courier New&amp;#39;, Courier, Monospace;font-size:10pt;"&gt; &lt;div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;"&gt;Code Snippet&lt;/div&gt; &lt;div style="background:#ddd;max-height:300px;overflow:auto;"&gt; &lt;ol style="background:#ffffff;margin:0 0 0 2.5em;padding:0 0 0 5px;"&gt; &lt;li&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; %&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;lt;%@ Import Namespace=&amp;quot;System.Security.Cryptography&amp;quot; %&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;lt;%@ Import Namespace=&amp;quot;System.Threading&amp;quot; %&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;&amp;lt;script runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;   void Page_Load() {&lt;/li&gt; &lt;li&gt;      byte[] delay = new byte[1];&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;      RandomNumberGenerator prng = new RNGCryptoServiceProvider();&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;      prng.GetBytes(delay);&lt;/li&gt; &lt;li&gt;      Thread.Sleep((int)delay[0]);&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        &lt;/li&gt; &lt;li&gt;      IDisposable disposable = prng as IDisposable;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;      if (disposable != null) { disposable.Dispose(); }&lt;/li&gt; &lt;li&gt;    }&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;lt;/script&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;nbsp;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;lt;html&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;lt;head runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;    &amp;lt;title&amp;gt;Error&amp;lt;/title&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;lt;/head&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;lt;body&amp;gt;&lt;/li&gt; &lt;li&gt;    &amp;lt;div&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;        An error occurred while processing your request.&lt;/li&gt; &lt;li&gt;    &amp;lt;/div&amp;gt;&lt;/li&gt; &lt;li style="background:#f3f3f3;"&gt;&amp;lt;/body&amp;gt;&lt;/li&gt; &lt;li&gt;&amp;lt;/html&amp;gt;&lt;/li&gt; &lt;/ol&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Kiểm tra kết quả&lt;/h3&gt;  &lt;p&gt;Để có thể kiểm tra kết quả, sau khi đã cấu hình lại cho ứng dụng, hãy truy cập vào một trang không tồn tại trong ứng dụng. Nếu như trang customError xuất hiện có nghĩa là ứng dụng đã được cấu hình đúng.&lt;/p&gt;  &lt;p&gt;Bên cạnh đó, Microsoft cũng cung cấp một script để chạy quét qua các ứng dụng đang tồn tại trên local server để kiểm tra xem các ứng dụng đã được cấu hình bật chức năng &amp;lt;customErrors&amp;gt; hay chưa. Có thể download script đó tại đây &lt;a title="published a .vbs script" href="http://www.asp.net/media/782788/detectcustomerrorsdisabledv30.zip"&gt;.vbs script&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Tìm hiểu thêm về lỗ hổng&lt;/h2&gt;  &lt;p&gt;Để có thể tìm hiểu chi tiết thêm về lỗ hổng này, có thể truy cập các trang sau&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/technet/security/advisory/2416728.mspx"&gt;Microsoft Security Advisory 2416728&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.technet.com/b/srd/archive/2010/09/17/understanding-the-asp-net-vulnerability.aspx"&gt;Understanding the ASP.NET Vulnerability&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.technet.com/b/msrc/archive/2010/09/17/security-advisory-2416728-released.aspx"&gt;Microsoft Security Response Center Blog Post&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx"&gt;Important: ASP.NET Security Vulnerability&lt;/a&gt; by ScottGu&lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7050" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>.NET Framework 4 Training for MSPs</title><link>http://msdnvietnam.net/blogs/duynb/archive/2010/09/18/net-framework-4-training-for-msps.aspx</link><pubDate>Sat, 18 Sep 2010 07:01:10 GMT</pubDate><guid isPermaLink="false">019a604b-fb74-42d5-8a6d-7cedfb08f61c:7047</guid><dc:creator>Duy Nguyen</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msdnvietnam.net/blogs/duynb/rsscomments.aspx?PostID=7047</wfw:commentRss><comments>http://msdnvietnam.net/blogs/duynb/archive/2010/09/18/net-framework-4-training-for-msps.aspx#comments</comments><description>&lt;p&gt;Today is a great day when I presented to all of MSPs in HCMC about What’s new in .NET Framework 4.0 and some cool new feature of Visual Studio 2010.&lt;/p&gt;  &lt;p&gt;There are some keynote for you&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_7ECAF960.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:block;float:none;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_5DD786B9.png" width="518" height="393" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Microsoft .NET Framework provides a secure, reliable, high-performance development framework that enables developers to easily reuse skills and assets across desktop, web, devices, server and cloud. It also provides developers with higher levels of abstraction, allowing them focus on the business logic. And increasing developer productivity while preserving compatibility are the key drivers of every .NET release.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_38D9C640.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://msdnvietnam.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/duynb/image_5F00_thumb_5F00_7C41C7A2.png" width="644" height="188" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And you can download my slide-deck at here &lt;a href="http://cid-06fa25cc4e99c490.office.live.com/self.aspx/.Public/What%5E4s%20new%20in%20.NET%20Framework%204.0.pdf" target="_blank"&gt;What&amp;#39;s new in .NET Framework 4&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You can also download key-binding docs of Visual Studio 2010 for C# here &lt;a href="http://cid-06fa25cc4e99c490.office.live.com/self.aspx/.Public/VS%20KB%20Brochure%20C%5E3%20m2.pdf" target="_blank"&gt;VS2010 C# Keybinding&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msdnvietnam.net/aggbug.aspx?PostID=7047" width="1" height="1"&gt;</description><category domain="http://msdnvietnam.net/blogs/duynb/archive/tags/.NET/default.aspx">.NET</category></item></channel></rss>
