Pages

28 thg 2, 2010

Google Chrome đang lấn sân Internet Explorer

Thống kê thị phần gần đây cho thấy Microsoft IE có vẻ bị Google Desktop và Chrome lấn sân, trong khi đó HĐH Windows 7 đã nhanh chóng được thị trường chấp nhận.

Victor Janulaitis, CEO của hãng nghiên cứu Janco Associates, tuyên bố với báo chí: trong sáu tháng qua, Microsoft đã có nhiều xáo trộn. Theo cuộc nghiên cứu thị phần HĐH và trình duyệt hồi tháng 2/2010 của Janco Associates, thị phần của trình duyệt Microsoft Internet Explorer (IE) đã tụt xuống hơn 12% từ tháng 2/2007 phần lớn do Firefox và Google cung cấp nhiều tính năng cạnh tranh lôi cuốn sự chú ý người dùng.

Firefox và Google là hai trình duyệt thắng thế trong sự thay đổi thị phần này. Desktop và Chrome của Google mới tham gia vào thị trường trình duyệt. Tuy nhiên khi IE8 được tung ra gần đây, khách hàng đã bớt chú ý đến hai trình duyệt trên.

Theo Janco Associates, Microsoft IE tiếp tục dẫn đầu lĩnh vực trình duyệt nhưng Microsoft vẫn mất khoảng 6% thị phần trong 12 tháng qua và hiện nay giữ được khoảng 65% tổng thị trường trình duyệt so với 80% trong tháng 2/2007. Thị phần của Firefox hầu như không thay đổi: giảm 1% xuống còn hơn 17%. Trong khi đó, thị phần trình duyệt của Google tăng hơn 2% lên gần 6%; còn trình duyệt Safari của Apple tăng gần 1% lên đến 1,39%. Với bản báo cáo này, Janco tuyên bố “chính thức khai tử” trình duyệt Netscape.

Janco cho biết, trong khi Microsoft nhận biết thị phần trình duyệt của mình co lại thì họ cũng thấy được HĐH Windows 7 mới tung ra gần đây đang phát triển tăng vọt.

Windows 7 hiện đạt 12% thị phần HĐH chỉ trong vòng 7 tháng kể từ khi được phát hành. Trước đây, HĐH được chấp nhận nhanh như thế là Windows XP. Thị phần của Vista đã đạt đỉnh và đang tụt dốc trong hầu hết doanh nghiệp.

Huy Thắng
Theo PCWorld Mỹ, 23/2/2010

HTML 5 - Tương lai web

HTML5 cho phép tạo ra các trang web có thể hoạt động tốt trên nhiều trình duyệt khác nhau của bất kỳ thiết bị nào. Không những vậy, HTML5 còn đem đến cho người dùng những trải nghiệm về tốc độ truy cập web nhanh hơn, tốt hơn, tài nguyên phong phú hơn.





























Hiện nay, công nghệ dành cho thiết bị di động ngày càng phát triển. Nếu như trước đây, bạn phải dùng chiếc máy tính để bàn (MTĐB) cồng kềnh cùng trình duyệt web IE (Internet Explorer) để lướt web, thì giờ đây với máy tính xách tay (MTXT), điện thoại thông minh (ĐTTM) cùng rất nhiều trình duyệt khác (Firefox, Opera…) bạn có thể dễ dàng lướt “net” ở bất kỳ đâu. Tuy nhiên với các thiết bị, trình duyệt web khác nhau, nội dung hiển thị trên màn hình sẽ khác nhau. Chẳng hạn, trên máy tính bạn xem trang web này rất tốt, nhưng trên ĐTTM thì giao diện và cấu trúc trang bị xáo trộn. Hay bạn có thể xem phim rất tốt với IE nhưng với Firefox thì không.


Vậy giải pháp nào để người dùng có thể sử dụng bất kỳ trình duyệt trên bất kỳ thiết bị nào cũng có thể xem được đầy đủ, trọn vẹn nội dung, thông tin trên internet.
HTML5 cho phép nhà phát triển, lập trình web tạo ra các trang web có thể hoạt động tốt trên nhiều trình duyệt khác nhau của bất kỳ thiết bị nào – từ MTĐB, MTXT cho đến ĐTTM. Không những vậy, HTML5 còn đem đến cho người dùng những trải nghiệm về tốc độ truy cập web nhanh hơn, tốt hơn, tài nguyên phong phú hơn.


Một số phần tử mới


HTML5 vẫn giữ lại các cấu trúc cơ bản như <HEADER>, <FOOTER>, nhưng được bổ sung các phần tử mới, chẳng hạn <CANVAS>, <AUDIO>.



Các phần tử trong cấu trúc mới


• <HEADER>: chứa thông tin giới thiệu của một phần hay một trang hoặc bất cứ thông tin gì của tiêu đề tài liệu hay tiêu đề nội dung của một bảng.


• <NAV>: chứa đường liên kết đến trang khác hoặc phần khác trên cùng trang, không nhất thiết chứa tất cả liên kết, chỉ cần đường chuyển hướng chính.


• <SECTION>: đại diện cho một phần tài liệu hay ứng dụng, cách thức hoạt động tương tự <DIV>.


• <ARTICLE>: đại diện một phần của trang, có thể đứng độc lập, chẳng hạn blog post, forum entry… hay bất kỳ thành phần nội dung đứng độc lập nào.


• <ASIDE>: đại diện cho nội dung có liên quan đến phần tài liệu chính hay các đoạn trích dẫn.


• <FOOTER>: đánh dấu không chỉ cuối trang hiện hành mà còn mỗi phần có trong trang. Vì vậy, <FOOTER> có thể dùng nhiều lần trong một trang.



Hình bên dưới sẽ giúp bạn thấy rõ hơn cấu trúc mới:











<HEADER>, <FOOTER> không chỉ đại diện cho phần đầu, phần cuối của trang hiện hành, mà còn là đại diện phần đầu, phần cuối của một phần tài liệu, hơn nữa, bạn có thể dùng <THEAD>, <TFOOT> trong các bảng dữ liệu. Việc sử dụng cấu trúc với các phần tử mới này giúp việc lập trình thuận tiện hơn.



Một số đặc điểm mới


Với sự đóng góp, cải tiến của các nhà phát triển trình duyệt như Google (trình duyệt Chrome), Apple (Safari), Mozilla (Firefox),…; HTML5 giờ đây đang dần hoàn thiện và có nhiều đặc tính khá tinh tế:


Lưu trữ ngoại tuyến (offline): cho phép lưu trữ dữ liệu liên tục hay từng phần mà không cần cài đặt tính năng bổ sung (plug-in), tương tự như Google Gears.


Miền vẽ (canvas drawing) cho phép tương tác trực tiếp với hình ảnh, biểu đồ, các đối tượng trong game (game component) thông qua các mã lập trình và tương tác người dùng – không cần Flash hay các plug-in.


Truyền nhận hình ảnh (video) và âm thanh (audio) trung thực: hiện đang trong quá trình hoàn thiện và thống nhất các chuẩn định dạng. Đến một ngày nào đó, YouTube và Pandora có thể sẽ không cần đến Flash nhưng vẫn đem đến cho bạn những đoạn video, âm thanh hấp dẫn.


Định vị người dùng (geolocation): HTML5 có thể giúp xác định vị trí của bạn và dùng nó để thực hiện cho một công việc nào đó, chẳng hạn phục vụ cho các kết quả tìm kiếm, cập nhật Twitter hay dùng cho các thiết bị định vị. HTML5 không giới hạn API của nhà cung cấp hay công cụ trình duyệt nào.


Mẫu nhập thông minh (smarter form): hộp tìm kiếm, dòng nhập thông tin, vùng thông tin hợp lệ… sẽ được kiểm soát tốt hơn, ít gây phiền toái cho người dùng khi họ điền thông tin, dữ liệu.


Tiếp cận các ứng dụng web dễ dàng (web application focus): chẳng hạn như việc xây dựng các trang wiki, công cụ kéo thả, bảng thảo luận, chat thời gian thực. Việc thực hiện các ứng dụng này sẽ nhanh chóng hơn và chúng có thể làm việc như nhau trên các trình duyệt.


Lợi ích mà HTML5 đem lại



Lợi ích to lớn nhất mà HTML5 đem lại là khả năng hỗ trợ API (Application Programming Interface - giao diện lập trình ứng dụng) và DOM (Document Object Model – mô hình đối tượng tài liệu hay cây cấu trúc dữ liệu).











HTML5 cho phép mở rộng dễ dàng với API. Điều này sẽ giúp các nhà phát triển tự do hơn trong việc sáng tạo các ứng dụng thân thiện hơn với người dùng khi mà họ còn lệ thuộc vào nền tảng Flash - lưu trữ dữ liệu và trình diễn ảnh động. Cùng với việc hỗ trợ bộ nhớ ứng dụng (application cache) và khả năng offline, HTML5 sẽ mở ra nhiều cơ hội tương lai cho các ứng dụng web. Khả năng offline có thể hình dung như việc Thunderbird, Outlook cho phép bạn kiểm tra email ngay cả khi bạn làm việc offline nhưng với HTML5 bạn sẽ thực hiện điều này qua trình duyệt. Đây là cầu nối quan trọng để mối “lương duyên” giữa máy tính cá nhân và môi trường web sớm hiện thực hơn. Google Gears cho chúng ta khả năng lưu trữ dữ liệu offline, Flash đem đến cho người dùng những trải nghiệm về sức mạnh của bộ nhớ ứng dụng (Pandora dùng nó để lưu trữ thông tin người dùng). Với HTML5, những khả năng này hiện đã sẵn sàng và có thể dễ dàng mở rộng với JavaScript.


Một lợi ích nữa, với HTML5, nhà phát triển chỉ cần lập trình một lần là có thể dùng được trên nhiều hệ thống, không như Flash hay các plug-in khác luôn cần có nhiều phiên bản khác nhau dành cho mỗi nền tảng.


Mặc dù Flash, SilverLight… vẫn là các plug-in đang hoạt động tốt, nhưng các nhà phát triển vẫn ra sức ủng hộ HTML5. Đơn giản vì: thứ nhất, tuy Flash hoạt động tốt nhưng đôi khi nó gây ra hiện tượng rò bộ nhớ (memory leak) hay làm nghẽn hệ thống (crash); thứ hai, HTML5 giúp tập trung, quản lý các phần tử tương tác trên trang web một cách tự nhiên, dựa vào các đoạn mã; thứ 3, HTML5 giúp JavaScipt hiện thực dễ dàng hơn. Một điểm nữa cho HTML5 là khả năng hỗ trợ nhà lập trình chuyển đổi từ XHTML.



Một khi có nhiều trình duyệt và nhiều nhà phát triển hỗ trợ các chuẩn tương tác video, audio của HTML5, thì ý tưởng về một cửa hàng cung cấp ứng dụng dùng được trên nhiều thiết bị, nền tảng – ĐTTM, MTĐB, MTXT, Windows, Mac, Linux – sẽ trở thành hiện thực.


Ứng dụng











HTML5 hiện đang được sử dụng trên một số điện thoại có trình duyệt nền tảng Webkit như Palm Pre, iPhone 3Gs, Google Android. Gần đây, Google cũng đã tích hợp sẵn HTML5 vào Wave nhằm xây dựng ứng dụng tất cả trong một từ blog, wiki, IM (instant messaging), e-mail cho đến giao tiếp đồng bộ. Trình duyệt Firefox 3.5 cũng đã hỗ trợ HTML5 với các thẻ <VIDEO> và <AUDIO>, theo định dạng .ogg.



HTML5 vẫn đang còn là bản dự thảo, nhưng với sự hỗ trợ mạnh mẽ từ các nhà phát triển trình duyệt Google, Apple, Mozilla… thì nó có khả năng “khuynh đảo” thị trường ứng dụng web, và sớm trở thành chuẩn web chính thức. Một số trình duyệt có hỗ trợ HTML5 (tùy mức độ): Firefox, Chrome, Safari, Opera.


Tuấn Trần (Tổng hợp)

Microsoft thắng vụ kiện hạ cấp xuống Windows XP

Tòa án Liên bang đã khép lại vụ kiện Microsoft bị cáo buộc vi phạm chống độc quyền vì đề ra những nguyên tắc cho việc hạ cấp từ Vista xuống XP.

Lệnh do Thẩm phán Toà sơ thẩm Mỹ, Marsha Pechman ban hành vào hôm 22/2/2010, khép lại vụ kiện do Emma Alvarado khởi tố vào tháng 2/2009.

Theo cáo buộc ban đầu thì người dân Los Angeles này đã tố cáo Microsoft ép các nhà sản xuất máy tính buộc khách hàng nào muốn dùng Windows XP phải mua Windows Vista trước, sau này là Windows 7, trước khi được phép hạ cấp xuống XP.

Theo phát ngôn viên của Microsoft, Kevin Kutz, hãng này đã hài lòng khi toà án cho rằng cáo buộc của bên nguyên không có luận cứ rõ ràng, và toà khép lại vụ kiện hoàn toàn.

Thẩm phán Pechman phản bác cáo buộc của Alvarado, vì cho rằng bên nguyên không chứng minh được Microsoft đã hưởng lợi từ thủ tục hạ cấp do họ đề ra và được các công ty sản xuất thiết bị gốc (OEM – original equipment manufacturer) thực hiện. Thẩm phán Pechman cho biết, bà Alvarado không dẫn chứng được nơi bà phải trả tiền để hạ cấp xuống XP hoặc không nhận được bản Vista khi bà tự do chọn mua máy tính mới với phiên bản này. Việc bà chọn hạ cấp xuống XP mà không phải trả thêm chi phí nào không có nghĩa là Microsoft tích lợi mà không cung cấp giá trị. Việc bà chỉ chọn mua một phiên bản cũng không có nghĩa là Microsoft cung cấp hàng giá rẻ. Theo quan điểm của Pechman, Alvarado đã hưởng được lợi nhiều như Microsoft: bên nguyên mua được hai phiên bản hệ điều hành của Microsoft với giá một bản.

Dù Alvarado đã khai bà phải trả một khoản phí 59,25 đô la Mỹ (59,25 USD, khoảng 1,2 triệu đồng) hồi giữa năm 2008 để hạ cấp laptop Lenovo mới của bà từ Vista xuống XP, nhưng Microsoft không nhận là đã có lợi. Microsoft không tính phí hay nhận một khoản tiền bản quyền nào khi khách hàng sử dụng quyền hạ cấp, một phát ngôn viên của Microsoft tuyên bố năm ngoái. Nhà sản xuất máy tính chứ không phải Microsoft tính thêm phí để hạ cấp một máy tính mới từ Vista xuống XP tại xưởng. Tuy nhiên, Alvarado không nêu đích danh hãng máy tính Lenovo trong cáo trạng.

Việc hạ cấp HĐH máy tính phổ biến từ năm 2007, khi người dùng không hài lòng với hiệu năng của Vista cài trong máy họ mới mua, nên tìm cách quay về với phiên bản gọn gàng hơn đó là XP. Năm ngoái, Microsoft cho biết sẽ cho phép người dùng hạ cấp từ Windows 7 xuống XP Professional cho đến tháng 4/2011. Vài nhà sản xuất máy tính, trong đó có Dell, tiếp tục cho hạ cấp từ Windows 7 xuống XP tại xưởng.

Huy Thắng
Theo ComputerWorld, 26/2/2010

Microsoft đưa ra Visual Studio 2010 RC

Hôm 8/1/2010, Microsoft đã tung ra bản Release Candidate (RC) của các công nghệ Visual Studio 2010 IDE và nền tảng lập trình đi cùng .Net Framework 4.

RC là bước “áp chót” trước khi tung ra sản phẩm chính thức, cho phép các nhà phát triển đưa ra những phản hồi cuối cùng. Microsoft dự định công bố Visual Studio 2010 và .Net Framework 4 vào ngày 12/4/2010 (kế hoạch trước đây là ngày 22/3/2010 nhưng đã bị trì hoãn do phải khắc phục những vấn đề hiệu năng mà các nhà thử nghiệm beta tìm ra).

Người dùng có thể tải Visual Studio 2010 RC về từ đây. Visual Studio 2010 có khả năng phát triển các ứng dụng cho nền tảng cộng tác Microsoft SharePoint, Windows 7, nền tảng “điện toán đám mây” Windows Azure.

Microsoft đã nhận được rất nhiều phản hồi về Visual Studio 2010 và .Net Framework 4 beta 2. Mục đích của bản RC này là nhận thêm nhiều phản hồi nữa để đảm bảo rằng những vấn đề hiệu năng đã được khắc phục.

Microsoft cũng đang làm việc với nhiều công ty phát triển add-in Visual Studio thuộc bên thứ 3 như Resharper, CodeRush để đảm bảo cho môi trường hoạt động tốt.

Bạch Đình Vinh
Theo InfoWorld, 9/2/2010

Những tính năng mới trong Visual Studio 2010

Visual Studio 2010 Beta 2 vừa ra mắt với nhiều tính năng mới hấp dẫn. Bên cạnh một giao diện được tích hợp để giúp người dùng sử dụng đơn giản nhất, phiên bản này còn tích hợp cả các công cụ kiểm soát chất lượng nhằm tạo ra các sản phẩm ứng dụng có chất lượng tốt nhất.

Thiết lập ý tưởng miễn phí

­­­Với chương trình mới này bạn có thể kiến tạo tất cả những gì bạn mà bạn có thể tưởng tượng ra, xây dựng chúng dựa trên những thế mạnh của bạn và mở ra những triển vọng mới. Những điều này được thực hiện nhờ sự hỗ trợ của nhiều công cụ mới như:

Hình mẫu mới, các công cụ thiết kế trực quan có thể giúp bạn kiến tạo các ứng dụng mới cho Windows và Web.
Tạo ra một nền tảng sáng tạo với chức năng SketchFlow trong mục Microsoft Expression Studio và Team Foundation Server

Tạo ra thuận lợi cho các cơ hội và khả năng mới thông qua các công cụ phát triển đám mây và lập trình đa lõi.

Đơn giản nhờ sự tích hợp

Phiên bản này được phát triển với một môi trường được tích hợp đơn giản giúp phát triển hơn nữa các kỹ năng của bạn và điều chỉnh cách bạn làm việc.
Hoàn thành tất cả các quá trình như mã hóa, làm mẫu, kiểm tra, gỡ lỗi, và triển khai công việc mà không cần rời khỏi môi trường Visual Studio 2010.
Sử dụng các kỹ năng và tiêu chuẩn hiện có để hướng tới tăng số lượng các loại ứng dụng bao gồm Microsoft SharePoint® và Windows® Azure™

Đơn giản nhờ sự tích hợp
Bộ công cụ chất lượng

Bộ công cụ để kiểm tra chất lượng các ứng dụng đã được tích hợp vào phiên bản này. Sức mạnh các công cụ kiểm tra với các đặc tính quản lý dự án sẽ giúp bạn xây dựng ứng dụng một các chính xác. Cụ thể một số công cụ kiểm soát chất lượng nổi bật của phiên bản mới này so với các phiên bản trước như sau:

Sử dụng bộ sửa lỗi IntelliTrace để cách ly những vị trí lỗi

Các công cụ quản lý dựa án bao gồm: các báo cáo mới, biểu đồ và các phần để lên kế hoạch

Kiểm tra tính chính xác của các ứng dụng thông qua các công cụ kiểm tra tự động hoặc bằng tay


Được tích hợp bộ công cụ kiểm tra chất lượng

Thanh Huyền (Theo: techtree)

26 thg 2, 2010

WCF Tutorial : Hướng dẫn tạo ứng dụng WCF

WEBSERVER

Tạo Solution mới, trong đó có Project WCF và Project của ứng dụng client như winform hay webform,… cùng chung 1 Solution sẽ đơn giản hơn trong việc thực hiện kết nối client với các dịch vụ như Webservice hay WCF.

Ctrl + Shilf + N

Sau khi tạo thành công project WCF, trong template sẽ có sẵn 1 số class như giao diện và lớp thực thi giao diện service. Mở các file .cs ra và ngâm cứu các đoạn code trong chúng.

Lưu ý, 2 attribute quan trọng nhất trong WCF là [ServiceContract] và [OperationContract]. [ServiceContract] dùng để đánh dấu các class thực thi service hay các giao diện của các service, [OperationContract] đánh dấu các method được đưa ra service (expose) cho client gọi.

Việc đánh dấu [ServiceContract] cho giao diện không phải là bắt buộc, không nhất định phải là như vậy, có thể không dùng giao diện mà đánh dấu trực tiếp cho lớp thực thi service. Nhưng rõ ràng là, trong OOP thì việc tận dụng các interface, kế thừa luôn có ưu điểm hơn hẳn.

Ngoài 2 attribute kể trên còn các attribute khác như [DataContract] (đánh dấu các class), [DataMember] (đánh dấu các thành phần public trong class đó).

Hiển nhiên, không phải giao diện nào, phương thức nào, hay các class nào cũng phải đánh dấu, chỉ riêng các thành phần nào được expose mới cần đánh dấu tương ứng.

Mở giao diện service (IService1) thêm vào method mới cho service

[OperationContract]

string Hello(string name);

Tiến hành cài đặt nội dung cho method mới trong lớp Service1 được cài đặt giao diện IService1 trong file Service1.svc.cs

#region IService1 Members

static int only = 1;

public string Hello(string name)

{

only++;

return only.ToString() + " Hello, Mr " + name;

}#endregion

Run (F5)

WEBCLIENT

Cần tạo thêm 1 client để thực hiện lời gọi dịch vụ.

Ta cần tạo thêm project web Asp.net nữa trong cùng 1 Solution chứa WCF.

Thực hiện kết nối service trên cùng 1 Solution, trên panel Solution Explorer , click chuột phải vào thư mục References chứa các tham chiếu chọn Add Service Reference…



Kết quả sau khi dò tìm các service trên Solution. Nếu có chút kinh nghiệm thì tham khảo thêm trong phần Advanced à OK

Đến đây bạn thêm trong trang Default.aspx 1 textbox txtName và 1 button Button1

Viết code cho sự kiện click Button1

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using WebApplication1.ServiceReference1;

namespace WebApplication1

{

public partial class _Default : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void Button1_Click(object sender, EventArgs e)

{

Service1Client client = new Service1Client();

string returnResult = client.Hello(txtName.Text);

Response.Write(returnResult);

}

}

}

Chạy trang web để test

Khi muốn thay đổi phần WCF ta ko cần thực hiện các bước kết nối nữa vì cả webserver và webclient cùng nằm chung 1 solution nên sẽ tự đồng bộ với nhau. Nếu muốn tạo client dạng winform cũng thực hiện các bước tương tự trên webform

Sự khác nhau giữa WCF và Webservice (WS)

WS là 1 phần trong WCF. WCF đưa ra nhiều tính mềm dẻo và khả chuyển hơn cho việc phát triển dịch vụ khi đem so sánh với WS. WCF có nhiều lợi thế hơn so với WS, bảng so sánh dưới đây cho thấy sự khác nhau giữa chúng

Đặc điểm

Webservice

WCF

Hosting

IIS

IIS, windows activation service, Self-hosting, Windows service

Lập trình

[WebService] attribute phải được thêm vào khi khai báo class

[ServiceContract] attribute phải được thêm vào khi khai báo class

Model

[WebMethod] attribute miêu tả Method được đưa ra cho client gọi

[OperationContract] attribute miêu tả Method được đưa ra cho client gọi

Tác vụ (Operation)

1 chiều, Request - Response

1 chiều, Request - Response, và 2 chiều (Duplex)

XML

Namespace System.Xml.serialization được sử dụng để phân tích xml

Mã hóa (Ecoding)

XML 1.0, MTOM, DIME

XML 1.0, MTOM, Binary

Transports

HTTP, TCP

HTTP, TCP, Named pipes, MSMQ,P2P

Giao thức

Bảo mật

Bảo mật, thông điệp được truyền tải 1 cách đáng tin cậy

25 thg 2, 2010

Tạo TCP server hỗ trợ đa tiểu trình

Khi muốn tạo một TCP server có thể cùng lúc xử lý nhiều TCP client, chúng ta sử dụng phương thức AcceptTcpClient của lớp TcpListener . Mỗi khi có một client mới kết nối đến, khởi chạy một tiểu trình mới để xử lý yêu cầu và gọi TcpListener.AcceptTcpClient...

Khi muốn tạo một TCP server có thể cùng lúc xử lý nhiều TCP client, chúng ta sử dụng phương thức AcceptTcpClient của lớp TcpListener. Mỗi khi có một client mới kết nối đến, khởi chạy một tiểu trình mới để xử lý yêu cầu và gọi TcpListener.AcceptTcpClient lần nữa.

Một endpoint TCP (địa chỉ IP và port) có thể phục vụ nhiều kết nối. Thực ra, hệ điều hành đảm đương phần lớn công việc giùm bạn. Những gì bạn cần làm là tạo một đối tượng thợ (worker object) trên server để xử lý mỗi kết nối trong một tiểu trình riêng.

Xét lớp TCP client và TCP server, bạn có thể dễ dàng chuyển server này thành một server hỗ-trợ đa tiểu trình để thực hiện nhiều kết nối cùng một lúc. Trước hết, tạo một lớp để tương tác với một client:

  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.IO;
  5. using System.Threading;
  6. using SharedComponent;
  7. public class ClientHandler {
  8. private TcpClient client;
  9. private string ID;
  10. public ClientHandler(TcpClient client, string ID) {
  11. this.client = client;
  12. this.ID = ID;
  13. }
  14. public void Start() {
  15. // Thu lấy network stream.
  16. NetworkStream stream = client.GetStream();
  17. // Tạo BinaryWriter để ghi ra stream.
  18. BinaryWriter w = new BinaryWriter(stream);
  19. // Tạo BinaryReader để đọc từ stream.
  20. BinaryReader r = new BinaryReader(stream);
  21. if (r.ReadString() == ClientMessages.RequestConnect) {
  22. w.Write(ServerMessages.AcknowledgeOK);
  23. Console.WriteLine(ID + ": Connection completed.");
  24. while (r.ReadString() != ClientMessages.Disconnect) {}
  25. Console.WriteLine(ID + ": Disconnect request received.");
  26. w.Write(ServerMessages.Disconnect);
  27. }else {
  28. Console.WriteLine(ID + ": Could not complete connection.");
  29. }
  30. // Đóng socket.
  31. client.Close();
  32. Console.WriteLine(ID + ": Client connection closed.");
  33. Console.ReadLine();
  34. }
  35. }

Kế tiếp, thay đổi mã lệnh của server sao cho nó lặp liên tục, tạo ra các thể hiện ClientHandler mới khi cần và chạy chúng trong các tiểu trình mới. Dưới đây là mã lệnh đã được sửa đổi:

  1. public class TcpServerTest {
  2. private static void Main() {
  3. TcpListener listener =new TcpListener(IPAddress.Parse("127.0.0.1"), 8000);
  4. Console.WriteLine("Server: About to initialize port.");
  5. listener.Start();
  6. Console.WriteLine("Server: Listening for a connection...");
  7. int clientNum = 0;
  8. while (true) {
  9. try {
  10. // Đợi yêu cầu kết nối, và trả về một TcpClient.
  11. TcpClient client = listener.AcceptTcpClient();
  12. Console.WriteLine("Server: Connection accepted.");
  13. // Tạo một đối tượng mới để xử lý kết nối này.
  14. clientNum++;
  15. ClientHandler handler =new ClientHandler(client, "Client " +clientNum.ToString());
  16. // Khởi động đối tượng này làm việc trong
  17. // một tiểu trình khác.
  18. Thread handlerThread =new Thread(new ThreadStart(handler.Start));
  19. handlerThread.IsBackground = true;
  20. handlerThread.Start();
  21. // (Bạn cũng có thể thêm Handler và HandlerThread vào
  22. // một tập hợp để theo dõi các phiên client.)
  23. }catch (Exception err) { Console.WriteLine(err.ToString());
  24. }
  25. }
  26. }
  27. }

Dưới đây là transcript phía server của một phiên làm việc với hai client:

Server: About to initialize port.

Server: Listening for a connection...

Server: Connection accepted.

Client 1: Connection completed.

Server: Connection accepted.

Client 2: Connection completed.

Client 2: Disconnect request received.

Client 2: Client connection closed.

Client 1: Disconnect request received.

Client 1: Client connection closed.

Bạn có thể thêm mã lệnh vào server để nó theo vết các đối tượng thợ hiện hành trong một tập hợp. Làm như thế sẽ cho phép server hủy bỏ các tác vụ này nếu nó cần phải đóng và chỉ được phép một số tối đa client cùng một lúc.

Sử dụng TCP một cách bất đồng bộ

Bạn cần ghi dữ liệu ra network stream từng khối một, mà không phải block phần mã lệnh còn lại. Kỹ thuật này có thể được sử dụng nếu bạn muốn “stream” một file lớn trên mạng. Khi đó, chúng ta sẽ tạo một lớp riêng để xử lý kỹ thuật streaming bất đồng bộ...

Bạn cần ghi dữ liệu ra network stream từng khối một, mà không phải block phần mã lệnh còn lại. Kỹ thuật này có thể được sử dụng nếu bạn muốn “stream” một file lớn trên mạng. Khi đó, chúng ta sẽ tạo một lớp riêng để xử lý kỹ thuật streaming bất đồng bộ. Bạn có thể bắt đầu “stream” một khối dữ liệu bằng phương thức NetworkStream.BeginWrite và cung cấp một phương thức callback. Khi callback được kích hoạt thì gửi khối kế tiếp.



Lớp NetworkStream hỗ trợ việc sử dụng bất đồng bộ thông qua phương thức BeginReadBeginWrite. Sử dụng các phương thức này, bạn có thể gửi hay nhận một khối dữ liệu trên một trong các tiểu trình do thread pool của bộ thực thi .NET cung cấp, mà không block mã lệnh của bạn. Mục này trình bày kỹ thuật ghi bất đồng bộ.



Khi gửi dữ liệu một cách bất đồng bộ, bạn phải gửi dữ liệu nhị phân thô (một mảng byte). Và bạn cần chọn kích thước mỗi lần gửi hay nhận. Ví dụ dưới đây tạo server sao cho mỗi lớp ClientHandler gửi một lượng lớn dữ liệu được đọc từ một file. Dữ liệu này được gửi một cách bất đồng bộ, nghĩa là ClientHandler có thể tiếp tục thực hiện các tác vụ khác (trong ví dụ này, nó chỉ việc lấy các thông điệp được gửi từ client).


Một thuận lợi của cách tiếp cận này là toàn bộ nội dung của file chẳng bao giờ nằm trong bộ nhớ một lượt. Thay vào đó, nó được thu lấy ngay trước khi một khối mới được gửi. Một thuận lợi khác nữa là server có thể hủy bỏ thao tác vào bất cứ lúc nào. Ví dụ, nếu client chỉ đọc đến khối dữ liệu thứ ba thì ngắt kết nối, server sẽ thiết lập một biến thành viên luận lý có tên là fileStop để báo cho callback không gửi dữ liệu nữa.


Dưới đây là lớp ClientHandler đã được sửa đổi (lớp TcpServerTest không cần thay đổi gì):


  1. using System;
  2. using System.Net;
  3. using System.Net.Sockets;
  4. using System.IO;
  5. using SharedComponent;
  6. public class ClientHandler {
  7. private TcpClient client;
  8. private string ID;
  9. // Kích thước một khối dữ liệu (2 KB).
  10. private int bufferSize = 2048;
  11. // Bộ đệm dùng để chứa dữ liệu.
  12. private byte[] buffer;
  13. // Dùng để đọc dữ liệu từ một file.
  14. private FileStream fileStream;
  15. // Dùng để giao tiếp với client.
  16. private NetworkStream networkStream;
  17. // Dấu hiệu ngừng gửi dữ liệu.
  18. private bool fileStop = false;
  19. public ClientHandler(TcpClient client, string ID) {
  20. this.buffer = new byte[bufferSize];
  21. this.client = client;
  22. this.ID = ID;
  23. }
  24. public void Start() {
  25. // Thu lấy network stream.
  26. networkStream = client.GetStream();
  27. // Tạo các đối tượng dùng để gửi và nhận text.
  28. BinaryWriter w = new BinaryWriter(networkStream);
  29. BinaryReader r = new BinaryReader(networkStream);
  30. if (r.ReadString() == ClientMessages.RequestConnect) {
  31. w.Write(ServerMessages.AcknowledgeOK);
  32. Console.WriteLine(ID + ": Connection completed.");
  33. string message = "";
  34. while (message != ClientMessages.Disconnect) {
  35. message = r.ReadString();
  36. if (message == ClientMessages.RequestData) {
  37. // Tên file có thể do client cung cấp, nhưng
  38. // trong ví dụ này, file thử nghiệm là mã cứng.
  39. fileStream =new FileStream("test.bin", FileMode.Open);
  40. // Gửi kích thước file.
  41. w.Write(fileStream.Length.ToString());
  42. // Khởi chạy thao tác bất đồng bộ.
  43. StreamData(null);
  44. }
  45. }
  46. fileStop = true;
  47. Console.WriteLine(ID + ": Disconnect request received.");
  48. } else {
  49. Console.WriteLine(ID + ": Could not complete connection.");
  50. }
  51. // Đóng kết nối.
  52. client.Close();
  53. Console.WriteLine(ID + ": Client connection closed.");
  54. Console.ReadLine();
  55. }
  56. private void StreamData(IAsyncResult asyncResult) {
  57. // Hủy bỏ nếu client ngừng kết nối.
  58. if (fileStop == true) {
  59. fileStop = false;
  60. return;
  61. }
  62. if (asyncResult != null) {
  63. // Một khối đã được ghi một cách bất đồng bộ.
  64. networkStream.EndWrite(asyncResult);
  65. }
  66. // Lấy khối kế tiếp từ file.
  67. int bytesRead = fileStream.Read(buffer, 0, buffer.Length);
  68. // Nếu không đọc được byte nào, stream đã đến cuối file.
  69. if (bytesRead > 0) {
  70. Console.WriteLine("Streaming new block.");
  71. // Ghi khối kế tiếp ra network stream.
  72. networkStream.BeginWrite(buffer, 0, buffer.Length,new AsyncCallback(StreamData), null);
  73. } else {
  74. // Kết thúc thao tác.
  75. Console.WriteLine("File streaming complete.");
  76. fileStream.Close();
  77. }
  78. }
  79. }

Bạn có thể sử dụng một mẫu tương tự để đọc dữ liệu một cách bất đồng bộ phía client.


[HaiPhong-Aptech st]

24 thg 2, 2010

Cách tạo file Crossdomain.xml

This brief tutorial will teach you how to create a crossdomain.xml file so that you can access files and information from outside domains and load files and data within your Flash / Flex apps. It is as simple as 4 easy steps.

Create an xml file named crossdomain.xml. (XML can be created with Dreamweaver or just simply MS Notepad. Just make sure that you give it the '.xml ' extension on the end.)
Copy and paste one of the code examples below into the XML file:
Save the file.
FTP / upload the file to the root directory of your website. (you should be able to see the file in a browser by typing the url www.yourwebsite.com/crossdomain.xml).

XML Code 1:
This is a typical crossdomain.xml file. Notice that I included my domain as well as my domain without the 'www' in front.

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policySYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="www.curtismorley.com" />
<allow-access-from domain="curtismorley.com" />
</cross-domain-policy>


XML Code 2:
The follwing Code will allow all domains. This effectively eliminates any security that Flash would have otherwise had. I suggest that you don't use this example unless you enjoy security holes
.

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>

XML Code 3:
The block of code below will explicitly disallow any and all access from any outside domain. As well, any domain that is not spelled exactly how the host domain is spelled will be blocked. This is the tighest cross domain security that you can employee.

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
</cross-domain-policy>

XML Code 4:
The code below illustrates different uses of the '*' wildcard symbol. This is the crossdomain.xml file from Amazon.com
The wildcard allows for any variation before '.amazon.com'. Amazon does this because of the public services and APIs that it allows others to connect to.

<cross-domain-policy>
<allow-access-from domain="*.amazon.com"/>
<allow-access-from domain="amazon.com"/>
<allow-access-from domain="www.amazon.com"/>
<allow-access-from domain="pre-prod.amazon.com"/>
<allow-access-from domain="devo.amazon.com"/>
<allow-access-from domain="images.amazon.com"/>
<allow-access-from domain="anon.amazon.speedera.net"/>
<allow-access-from domain="*.amazon.ca"/>
<allow-access-from domain="*.amazon.de"/>
<allow-access-from domain="*.amazon.fr"/>
<allow-access-from domain="*.amazon.jp"/>
<allow-access-from domain="*.amazon.co.jp"/>
<allow-access-from domain="*.amazon.uk"/>
<allow-access-from domain="*.amazon.co.uk"/>
</cross-domain-policy>

Creating a cross domain policy file is just that easy.
And Happy Flashing.
P.S. I highly suggest that you read one or all of the following articles on cross domain policy files and the Flash Player security sandbox

Powered By Blogger