Giao tiếp với Web

Một phần của tài liệu Nghiên cứu & thực hành với phần mềm LabView tại trung tâm nghiên cứu MICA (Trang 66 - 70)

II.1. Gửi và nhận các yêu cầu HTTP

Tiếp theo chỳng ta sẽ thảo luận về vấn đề rất hay, đú là việc tạo cũng như nhận cỏc yờu cầu HTTP requests, chỳng ta sẽ núi về lập trỡnh World Wide Web. Như mọi ngời đó biết World Wide Web là cơ sở của Hypertext Transport Protocol (HTTP). Tất nhiờn, hầu hết cỏc trỡnh ứng dụng đều cú kiểu HTTP request từ trỡnh duyệt Web Browser, nhưng thật hữu ớch nếu, đặc biệt là với mục đớch gỡ lỗi thỡ chỳng ta cần biết lập trỡnh với HTTP Requests. .NET Framework SDK cung cấp cỏc lớp để chỳng ta thao tỏc một cỏch dể dàng, đú là lớp WebRequest và lớp HttpWebResquest trong khụng gian tờn System.Net. Yờu cầu HTTP đơn giản nhất là gửi là gửi yờu cầu HTTP

GET đến Uniform Resource Identifier riờng biệt. Và HTTP Server (Web Server) sẽ gửi thụng tin phản hồi với một status code, một header, và một message body. Vớ dụ sau thực hiện yờu cầu trờn:

using System; using System.Net; using System.IO; class HttpGet {

public static void Main(string[] args){ HttpWebRequest req =

(HttpWebRequest) WebRequest.Create(args[0]); Console.WriteLine("Created, but not connected"); HttpWebResponse res =

(HttpWebResponse) req.GetResponse();

Console.WriteLine("Status: " + res.StatusCode); foreach(string key in res.Headers.Keys){

Console.WriteLine("Header[{0}]:{1}", key, res.Headers[key]);

}

Console.WriteLine("Contents:"); StreamReader rdr = new StreamReader( res.GetResponseStream());

Console.WriteLine(rdr.ReadToEnd()); }

}///:~

Cỏch khởi tạo HttpWebRequest cũng giống như trong cỏc vớ dụ trước. Ta tạo ra một biến kiểu HttpWebRequest và cho nú trỏ đến đối tượng kiểu WebRequest. Một kiểu khỏc của WebRequest trong .NET Framework SDK là FileWebRequest, được khởi tạo bằng cỏch đưa vào tham số đối với WebRequest.Start() là “file://,” nhưng nếu bạn viết kiểu “ftp://” bạn cú thể gọi phương thức tĩnh WebRequest.RegisterPrefix() và WebRequest.Create() sẽ trả về sau đú một WebRequest mới. Yờu cầu Request sẽ khụng mang tớnh thực tế chuyển tải trờn mạng cho đến khi gọi WebRequest.GetResponse(). Bởi vỡ chỳng ta biết rằng chỳng ta đang phõn chia yờu cầu bắt đầu với “http://”. Sau khi nhận về HttpWebRespone.StatusCode, sau đú chỳng ta viết Http header vào Console. Tiờu đề header chớnh là thuộc tớnh HttpWebResponse.Header xuất phỏt từ đối tượng WebHeaderCollection là kiểu con của NameValueCollection.

.NET Framework SDK được thiết kế cú hổ trợ Microsoft’s Internet Information Server (IIS) và hầu hết cỏc hỡnh thức truy cập trực tiếp đều cú hổ trợ giao diện IHttpHandler trong khụng gian tờn System.Web. IHttpHandler định nghĩa hai thứ: một thuộc tớnh bool được gọi là IsReusable chỉ rừ đối tượng với khả năng bảo vệ Http Request. Khi đang viết một chương trỡnh Web thành phần đũi hỏi trạng thỏi giảm đến mức tối đa server của bạn. Chớnh vỡ vậy nờn thớch hợp hơn khi bạn đặt

thuộc tớnh này là true. Thành phần thức hai của IHttpHandler là phương thức IHttpHandler.ProcessRequest(), đõy là phương thức tạo ra đối tượng HttpContext. Thuộc tớnh quan trọng nhất trong HttpContext là cỏc đối tượng HttpRequest và HttpResponse (chỳ ý rằng cỏc lớp này khỏc với cỏc lớp mà được dựng tại client HttpWebRequest và HttpWebResponse). HttpRequest chứa một số lượng lớn cỏc thuộc tớnh, hầu hết được dựng với thuộc tớnh HttpRequest.Form, trả về NameValueCollection với cỏc định dạng tờn biến và giỏ trị là kiểu string.

II.2. Các yêu cầu Web không đồng bộ

Vấn đề khụng được thảo luận ở phần trước đú là phần giao diện của dũng tin .NET Framework IO stream cú hổ trợ vào ra khụng đồng bộ, được gọi để đọc hoặc viết một dũng tin khụng phải là gúi. Sự khụng đồng bộ trong IO sử dụng thiết kế khụng đồng bộ mà Microsoft chủ trương phỏt triển rộng trong sử dụng: đú là cú một khai bỏo bắt đầu và kết thỳc operation và kớch hoạt kiểu đại diện khụng đồng bộ:

public delegate void AsyncCallback(IAsyncResult ar); IasyncResult ar cú một số trường chứa:

 Một Object AsyncState là một đối tượng domain phản chiếu bất kỳ trạng thỏi nào cần thiết cho hàm gọi ngược trở lại.

 WaitHandler AsyncWaitHandler cú thể dựng đồng bộ nhiều tiến trỡnh phức tạp trong cỏc điều hành khụng đồng bộ.

 CompletedSynchronously and IsCompleted là hai thuộc tớnh kiểu bool xỏc định khi sự đồng bộ húa begin operation hoàn thành và khi end operation kết thỳc.

Trong trường hợp WebRequest, sự đồng bộ húa được gọi đến phương thức WebRequest.GetResponse() cựng phản hồi cựng lỳc với phương thức bắt đầu begin

và kết thỳc end của WebRequest.BeginGetResponse( ),

WebRequest.EndGetResponse( ). Để thiết lập một Web request thực sự đồng bộ

chúng ta nờn dựng những phương thức này cho quỏ trỡnh đọc khụng đồng bộ của cỏc dũng Stream phản hồi dựng Stream.BeginRead() và Stream.EndRead().

II.3. Dịch vụ Web

WebServices khụng là cỏc trỡnh ứng dụng đứng đầu trong việc thức hiện vào ra để gửi với chuẩn Internet Protocol. Với “headless”, chỳng ta hiểu rằng WebServices khụng cú phần giao diện người dựng (tất nhiờn giao diện người dựng cuối cựng thỡ cũng cần thiết, nhưng nú được thiết lập bởi một số thành phần khỏc chứ khụng phải WebServices. Thay vỡ cỏc đối tượng hay cỏc mó HTML (cỏc thành phần giao diện), WebServices dựng tài liệu XML đối với việc vào và ra dữ liệu. Cỏch mà XML input tạo ra và XML output xúa như thế nào khụng phải là nội dung cần quan tõm của WebServices. Với “Standard Internet Protocols”, chỳng ta cú được nhiều khả năng thao tỏc. Khi mà WebServices trở thành từ thụng dụng thỡ cỏc biến tự động

hoàn thành bằng cỏch nhỡn vào danh sỏch cỏc đặc điểm của chỳng và núi rằng “Nếu khụng hổ trợ giao thức này thỡ khụng thể hoàn thành được” hay là “Giao thức này thật là thiết kế mỡ rộng để giải quyết vấn đề của chỳng ta”. Theo hướng đú cú nhiều chuẩn đối lập nhau đối với bản chất của cỏc chức năng, bao gồm ý nghĩa cỏc thủ tục của thủ tục được gọi và ý nghĩa mà WebServices mụ tả. Cấu trỳc chớnh là cỏc quyết định bỡnh phẩm đối với WebServices nhưng .NET vẫn kiờn quyết theo phớa của Simple Object Access Protocol (SOAP).

Sau đõy là một vớ dụ đơn giản của WebServices : chương trỡnh “Hello,C#” được kết hợp với WebMethodAttribute. Như là một thành phần của trỡnh biờn dịch, Visual Studio .NET nhận ra thuộc tớnh này và tự động đưa lờn IIS qua dịch vụ SOAP. IIS điều đầu cuối của URI thụng qua file .asmx với cỏc cụng cụ của WebServices. File này phải cú dũng khai bỏo WebServices riờng ở đầu, nhưng hơn hết là sau đú thỡ cỏc thuộc tớnh được hoàn toàn. Vớ dụ này sẽ trả về thời gian time của server hiện tại:

<%@ WebService Language="C#" Class="WhatsTheTime" %> using System; (adsbygoogle = window.adsbygoogle || []).push({});

using System.Web.Services;

[WebService(Namespace="http://localhost/")] class WhatsTheTime{

[WebMethod] public DateTime Time(){ return DateTime.Now;

} }///:~

File được save dưới dạng Xxx.asmx, nú phải được thờm vào khai bỏo <%@ ... %>, phương thức được khai bỏo dạng public và kết hợp với WebMethodAttribute và server của bạn phải cài nền .NET Framework. IIS cung cấp một dịch vụ được mụ tả trong Web Services Description Language (WSDL). Khi bạn khai bỏo :

<%@ WebService Language="C#" Class="Type,Assembly" %>

Thỡ phương thức WebMethodAttribute trong kiểu Type sẽ được load từ Asssemble trong thư mục con /bin. Khi bạn dựng Visual Studio .NET để tạo một WebServices Project thỡ kiểu của WebServices phải được khai bỏo. Khối <%@...@> trong khai bỏo trang ASP.NET. Cũng giống như ADO.NET hay XML thỡ trang ASP.NET cũng là một cụng nghệ được tạo nờn với C#, nhưng nú khụng phải là một tập con ASP.NET được biờn dịch thành khối cỏc mó lệnh HTML (giống WebServices đó khai bỏo ở trờn). Chỳng ta khụng núi nhiều về ASP.NET ở đõy mà sẽ trỡnh bày về nú trong tài liệu khỏc.

Phần VI: Một vài so sánh C# với các ngôn ngữ khác

Trong phần này, chúng em sẽ đa ra một vài so sánh theo suy nghĩ cá nhân nhằm đa ra những sự khác biệt của C# với các ngôn ngữ khác. C#, C++, Java có thể coi nh có chung một nguồn gốc đó là loại ngôn ngữ lập trình hớng đối tợng nên chúng có độ tơng đồng với nhau hơn là tơng đồng với các ngôn ngữ khác. VB có thể coi là ít tơng đồng nhất với C#.

Một phần của tài liệu Nghiên cứu & thực hành với phần mềm LabView tại trung tâm nghiên cứu MICA (Trang 66 - 70)