Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 78 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
78
Dung lượng
1,5 MB
Nội dung
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHIỆP – THÁI NGUYÊN KHOA ĐIỆN TỬ NGUYỄN TUẤN ANH Email: tuananhk43@yahoo.com ĐT: 0912662003 LẬP TRÌNH ỨNG DỤNG TRÊN POCKET PC THÁI NGUYÊN 05/2006 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com MỤC LỤC Chương Thiết lập môi trường phát triển ứng dụng 1.1 Smart Device Extensions NET Compact Framework .4 1.1.1 Yêu cầu hệ thống 1.1.2 Sử dụng Smart Device Extensions trình phát triển 1.2 Các thiết bị phi chuẩn 10 Chương Thiết kế ứng dụng GUI Windows Forms 13 2.1 Những điều khiển không hỗ trợ 13 2.2 Những hàm NET Compact Framework không hỗ trợ 13 2.3 Thiết kế Form Visual Studio NET 14 2.3.1 Cửa sổ thiết kế Forms 14 2.3.2 Cửa sổ ToolBox 14 2.3.3 Cửa sổ thuộc tính 15 2.4 Tìm hiểu tảng Window Form 16 2.4.1 Nền tảng Windows CE NET .16 2.4.2 Nền tảng Pocket PC 16 2.5 Làm việc với Form 16 2.5.1 Ảnh hưởng thuộc tính FormBorderStyle .16 2.5.2 Sử dụng thuộc tính ControlBox 17 2.5.3 Thuộc tính MinimizeBox MaximizeBox .17 2.5.4 Thuộc tính Size 18 2.5.5 Thiết lập vị trí Form thuộc tính Location 18 2.6 Điều khiển Button 18 2.7 Điều khiển TextBox 19 2.8 Điều khiển Label 19 2.9 Điều khiển RadioButton 19 2.10 Điều khiển CheckBox .20 2.11 Điều khiển ComboBox .21 2.12 Điều khiển ListBox 23 2.13 Các điều khiển khác 24 Chương Khả kết nối mạng Net Compact Framework 25 3.1 Sockets 25 3.1.1 Giao thức: TCP/IP, UDP 25 3.1.2 Sự thực thi IP: IPv4 hay IPv6 26 3.2 Lập trình Socket với NET Compact Framework 26 3.2.1 Tạo kết nối từ máy khách tới máy chủ (client) 26 3.2.2 Tạo kết nối từ máy chủ lằng nghe từ máy khách (Host) 27 3.2.3 Đọc ghi Socket kết nối .28 3.3 Tuần tự hóa đối tượng để truyền qua Socket .30 3.4 Sử dụng gói UDP .31 3.5 Kỹ thuật Multicasting với gói tin UDP .33 3.6 Truyền thông với máy chủ xa thông qua giao thức HTTP .33 3.7 Truyền thông với máy chủ xa thông qua giao thức HTTPS 35 3.8 Truyền thông qua thiết bị cổng IrDA 35 Chương ADO.NET NET Compact Framework 39 4.1 Giới thiệu ADO.NET 39 4.2 Lưu trữ liệu DataSet 39 4.2.1 Bên DataSet: DataTables, DataRows, DataColumns 39 4.2.2 Đưa liệu vào DataSet 40 4.2.3 Xây dựng DataSet lưu trữ Phone Book 41 4.2.4 Trích liệu từ DataSet 42 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com 4.2.5 Thay đổi liệu DataSet 42 4.3 Ràng buộc liệu 43 4.3.1 Thêm ràng buộc vào DataSet 43 4.3.2 Thêm UniqueConstraint 43 4.3.3 Ngăn ngừa giá trị NULL DataColumn 44 4.4 Thiết lập trường tự động tăng giá trị 44 4.5 Mơ hình liệu quan hệ với DataSet 45 4.6 Gắn liệu với điều khiển 48 Chương Lập trình với Microsoft SQL Server CE 49 5.1 Tìm hiểu tính chất hỗ trợ Microsoft SQL Server 2000 Windows CE Edition 49 5.2 Tạo CSDL Microsoft SQL Server CE .49 5.3 Thêm cấu trúc vào CSDL Microsoft SQL Server CE 50 5.4 Lưu trữ (Populating) CSDL Microsoft SQL Server CE 53 5.5 Lấy liệu SqlCeDataReader .54 5.5.1 Lấy liệu SqlCeDataReader 54 5.5.2 Sử dụng tham số SQL Commands .56 5.6 Lọc DataSet SqlCeDataAdapter 58 5.7 Cập nhật CSDL Microsoft SQL Server CE sử dụng SqlCeDataAdapter 59 5.8 Đối tượng SqlCommand với SqlCeCommandBuilder .60 Chương Phát triển cho SmartPhone 62 6.1 Giới thiệu SmartPhone 62 6.2 Phát triển SmartPhone NET Compact Framework 62 6.3 Viết ứng dụng cho SmartPhone - XMLDataSetViewer .63 Chương Sử dụng XML Web Services 66 7.1 Tạo XML Web Service .66 7.2 Tìm hiểu NET Framework Web Service Client 69 7.3 Tạo ứng dụng Client XML Web Service 70 7.3.1 Thêm Web Reference vào Client Application 70 7.3.2 Xem lớp Proxy 71 7.3.3 Sử dụng QuotableQuotes Web Service 72 7.3.4 Asynchronous Consumption of the Simple Web Service 73 7.4 Sử dụng Web Service có sử dụng DataSet 74 7.5 Sử dụng Web Service trả kiểu DataSet .76 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com LẬP TRÌNH CHO THIẾT BỊ DI ĐỘNG TRÊN NỀN WINDOWS MOBILE Sau tìm hiểu lập trình cho thiết bị di động Windows mobile Trong tài liệu ví dụ triển khai ngơn ngữ lập trình C#, Visual Studio NET 2003 Chương Thiết lập môi trường phát triển ứng dụng 1.1 Smart Device Extensions NET Compact Framework 1.1.1 Yêu cầu hệ thống Smart Device Extensions môi trường phát triển tích hợp (IDE) mà nhà phát triển nhằm vào NET Compact Framework Nó thành phần củaVisual Studio NET version 7.1 Để chạy công cụ trên, yêu cầu tối thiểu cấu sau: Bảng 1.1 yêu cầu hệ thống cho Visual Studio NET 2003 Lĩnh vực Yêu cầu Operating system Windows 2000 Professional; 96MB RAM, 128MB đề nghị Windows and RAM 2000 Server; 192MB RAM, 256MB đề nghị Windows XP Professional; 192MB RAM, 256MB đề nghị Windows XP Home; 96MB RAM, 128MB đề nghị Windows NET Server 2003; 192MB RAM, 256MB đề nghị Hard disk space Ít 900MB ổ chứa hệ điều hành khoảng 4.1GB để cài Micorsoft Visual Studio Net Processor speed Tối thiểu Pentium II 450MHz tương đương; Pentium III 600MHz lớn Device ActiveSync 3.5 connectivity Bạn cần phải có thiết bị để chạy thử chương trình .NET Compact Framework tương thích với tất thiết bị có khả chạy hệ điều hành Pocket PC 1.1.2 Sử dụng Smart Device Extensions trình phát triển Cách dễ để phát triển NET Compact Framework sử dụng Smart Device Extensions Visual Studio NET 7.1 Nó đơn giản mở rộng Visual Studio 7.1, Smart Device Extensions đưa kiểu tạo ứng dụng, cho phép tập chung vào thiết bị sử dụng Windows CE hỗ trợ NET Compact Framework, Pocket PC Điều có nghĩa sử Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com dụng Smart Device Extensions để phát triển ứng dụng Windows CE phát triển ứng dụng Windows 2000 or XP Tạo ứng dụng cho thiết bị Pocket PC Chúng ta tạo ứng dụng đơn giản “Hello World” ngôn ngữ C# Bước 1: Khi chạy Visual Studio NET lần đâu, hiển thị Start Page, hình Để tạo ứng dụng mới, bấm vào nút có nhãn New Project gần phía hình Hoặc vào menu File -> New -> Project sử dụng Ctrl+ Shift +N Hình 1.1 Start Page hiển thị chạy Visual Studio NET Bước 2: Sau chọn New Project, hộp thoại xuất cho phép chọn kiểu dự án Lựa chọn mục Visual C# Project Smart Device Application hình 1.2 Điền tên dự án vào mục Name, nơi chứa dự án vào mục Localtion Hình 1.2 Hộp thoại tạo Visual C# Smart Device Application Bước 3: Hộp thoại hình 1.3 Hộp thoại chia làm hai phần: - "What platform you want to target?" Phần cho phép chọn kiểu thiết bị mà muốn phát triển Chúng ta chọn tảng Pocket PC, điều có nghĩa Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com ứng dụng chạy tất thiết bị hỗ trợ hệ điều hành Pocket PC, bao gồm SmartPhones - "What project type you want to create?": Windows Application, Class Library, Nongraphical Application, Empty Project Chúng ta chọn Windows Application Kiểu dự án thiết lập form tự động cung cấp mơi trường thiết kế đồ họa giúp dễ dàng thêm điều khiển vào ứng dụng Hình 1.3 Lựa chọn tảng mẫu ứng dụng - Class Library: sử dụng để tạo thư viện liên kết động (DLL) cho NET Compact Framework - Non-graphical Application: cho phép người sử dụng tạo ứng dụng kiểu console, ứng dụng loại hữu dụng thiết bị chạy hệ điều hành Windows CE cung cấp nhắc nhở dòng lệnh Non-graphical Application thiết lập số lượng nhỏ mã nguồn bắt đầu người sử dụng - Non-graphical Application: Tạo ứng dụng không dùng đồ họa - Empty Project: tạo file mã nguồn rỗng Khi người sử dụng phải tự đưa vào tất mã nguồn để thiết lập giao diện Bước 4: Sau bạn lựa chọn hình 1.3, bấm OK Visual Studio tự động kích hoạt Smart Device Extensions đưa đến phần thiết kế Forms, hình 1.4 Thiết kế Forms giống thiết kế sử dụng dự án desktop Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Hình 1.4 Thiết kế Forms xuất sau dự án tạo Bước 5: Bên trái phần thiết kế Forms, nhãn Toolbox Bấm vào đưa đến cho hộp cơng cụ Toolbox, hình 1.5 Hình 1.5 Hộp cơng cụ Toolbox cho dự án Smart Device Application Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Bước 6: Tất điều khiển hộp công cụ sử dụng dự án NET Compact Framework Kéo số điều khiển vào Forms hình 1.6 Hình 1.7 Sau kéo số điều khiển vào Forms Bước 7: Bấm đúp vào nút có nhãn button1, IDE đưa đến phần soạn thảo mã nguồn trỏ nhấp nháy phương thức button1_Click Chúng ta đưa vào số dòng lệnh hình 1.7 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Hình 1.7 Visual Studio hiển thị mã lệnh nút Form bấm đúp Bước 8: Bây biên dịch triển khai thiết bị Để triển khai thiết bị chạy ứng dụng, chọn Debug, Start Without Debugging Trước tiên Visual Studio biên dịch mã nguồn đưa cho hộp thoại Deploy SmartDeviceApplication, hình 1.8 Hình 1.8 Trước triển khai ứng dụng thiết bị, Visual Studio đưa hộp thoại Bước 9: Để chạy thử ứng dụng máy tính Desktop, chọn Pocket PC 2002 Emulator Nếu muốn chạy thử thiết bị thực, chọn Pocket PC Device Phải đảm bảo thiết bị kết nối thông quan đường ActiveSync trước triển khai ứng dụng thiết bị Sau chọn Deploy Bước 10: Visual Studio cài đặt NET Compact Framework chạy ứng dụng Nếu bấm vào nút Button1, nhận thông báo “Hello World” hình 1.9 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Hình 1.10 Thiết bị emulator chạy ứng dụng hello world 1.2 Các thiết bị phi chuẩn NET Compact Framework chạy nhiều thiết bị phần cứng chạy Windows CE Bảng 1.2 cho thấy xử lý hỗ trợ NET Compact Framework hệ điều hành hỗ trợ cho xử lý .NET Compact Framework lưu trữ file CAB máy Desktop Chỉ có file CAB cho hệ điều hành kiểu xử lý mà NET Compact Framework hỗ trợ Smart Device Extensions đưa file CAB phù hợp vào thiết bị xác định thiết bị khơng cài đặt NET Compact Framework Trong phần này, thảo luận chi tiết xử lý làm việc làm để tự triển khai file CAB triển khai tự động Tất thiết bị Pocket PC chạy hệ điều hành Pocket PC version 2003 có NET Compact Framework ROM Nếu triển khai gỡ lỗi ứng dụng thiết bị, phần học cách làm để Smart Device Extensions kết nối với thiết bị để gỡ lỗi triển khai thảo luận vài vấn đề liên quan Bảng 1.2 Các xử lý hệ điều hành NET Compact Framework hỗ trợ Tên CPU Phiên hệ điều hành hỗ trợ Intel ARM Pocket PC 2000, 2002, 2003, WinCE 4.1 Intel ARM 4i Pocket PC 2000, 2002, 2003, WinCE 4.1 Hitachi SH3 Pocket PC 2000, 2002, 2003, WinCE 4.1 Hitachi SH4 Pocket PC 2003 WinCE 4.1 10 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Bước 3: Khi kết thúc thiết lập ứng dụng mới, sem phần sửa form Toolbox, hình 6.2 Hình cho thấy hầu hết dự án Pocket PC, ngoại trừ form nhỏ để mang lại cho hình nhỏ SmartPhones Mặc dù số điều khiển Toolbox bị mờ Hình 17.2 Sửa form hộp cơng cụ cho dự án SmartPhone chứa đựng số điều khiển bị mờ Bước 4: Kéo DataGrid TextBox vào form Tên DataGrid dgDataSet tên TextBox txtXmlToLoad Sử dụng giá trị mặc đinh cho TextBox là: \Storage\Program Files\XMLDataSetViewer_CS\SampleDataSet.xml Bước 5: Thêm tham chiếu đến DataGrid Để làm điều này, bấm chuột phải vào tên solution (XmlDataSetView_CS) Solution Explorer Sau chọn Add Reference Chúng ta nhìn thấy hộp thoại chọn nhiều DLLs Chọn nút Browse di chuyển tới thư mục thư mục cài Visual Studio (C:\Program Files\Microsoft Visual Studio NET 2003) Trong thư mục lựa chọn file CompactFrameworkSDK\v1.0.5000\Windows CE\ System.Windows.Forms.DataGrid.dll Bước 6: Thêm đối tượng menu cách chọn biểu tượng MainMenu1 xuất phần sửa form (form editor) IDE Chúng ta thêm mục menu cách bấm khe thêm menu sau gõ text cho menu Ví dụ: Exit Load XML Bước 7: Thêm mã lệnh cho menu Exit cách bấm đúp vào IDE mang đếm phương thức nhận gọi menu Exit chọn Thêm mã lệnh: Application.Exit(); Bước 8: Thêm biến cho DataSet, có tên m_DataSet, lớp Form1 Ví dụ, biến thành viên lớp cho dự án sau: public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.DataGrid dgDataSet; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.MenuItem menuItem2; 64 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com private System.Windows.Forms.TextBox txtXmlToLoad; private System.Windows.Forms.MainMenu mainMenu1; private DataSet m_DataSet; // Rest of class Form1 not shown here Bước 9: Thêm mã lệnh cho menu Load XML cách bấm dúp chuột vào mục đưa vào đoạn mã lệnh sau: if (this.m_DataSet == null) { this.m_DataSet = new DataSet(); } this.m_DataSet.Clear(); try { m_DataSet.ReadXml(this.txtXmlToLoad.Text); // Set up a DataView DataView l_DataView = new DataView(m_DataSet.Tables[0]); this.dgDataSet.DataSource = l_DataView; } catch (Exception ex) { MessageBox.Show(ex.ToString()); } Bước 10: Thêm file mặc đinh XML, SampleDataSet.xml, vào ứng dụng Để làm điều này, Solution Explorer bấm Ctrl+Alt+L đưa chuột qua tên solution (ví dụ, XMLDataSetViewer_CS) Bấm chuột phải chọn Add, Add Existing Item, sau chọn file SampleDataSet.xml Chúng ta tìm file dự án XMLDataSetViewer Bước 11: Xây dựng triển khai ứng dụng! Nếu khơng có thiết bị SmartPhone, triển khai emulator Virtual Radio Sử dụng XML DataSetViewer Sử dụng ứng dụng khác với sử dụng ứng dụng Pocket PC khơng bàn phím sờ Khơng có bàn phím, số nút Để chọn file XML để nạp file vào ứng dụng, phải trèn đầy đủ đường dẫn file XML vào textbox Để làm điều này, trước tiên tạo textbox vào ứng dụng Một textbox kích hoạt, di chuyển trỏ với trỏ trèn văn vào phím số Để nạp file XML, bấm menu phải, mục Load XML 65 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Chương Sử dụng XML Web Services 7.1 Tạo XML Web Service Trước tạo NET Compact Framework XML Web service client, XML Web Service client phải sử dụng Trong phần tạo Web service, tạo a NET Compact Framework client để sử dụng Web service XML Web service trả thông tin cá nhân Thơng tin người lưu CSDL Microsoft SQL Server Khi yêu cầu tạo ra, XML Web service truy vấn trích dẫn ngâu nghiên trả thơng tin trích dẫn Chúng ta cần phải thiết lập CSDL trước chạy ví dụ Để tạo XML Web service Visual Studio.NET, sử dụng ASP.NET Web Service template Tên dự án QuotableQuotesWebService XML Web service có tên Service1 tạo file Service1.asmx Thay đổi tên XML Web service thành QuoteService file nguồn aspx QuoteService.aspx XML Web service đưa phương thức web, GetQuote Phương thức trả thơng tin trích dẫn Thơng tin trích dẫn lấy từ CSDL Microsoft SQL Server Có thủ tục CSDL QuotableQuotes có tên GetQuote, thủ tục sử dụng để truy vấn thơng tin trích dẫn Microsoft Visual Studio.NET trợ giúp trình viết mã lệnh để tác động đến thủ tục Trước tiên mở Server Explorer tạo stored procedure GetQuote CSDL QuotableQuotes Kéo stored procedure GetQuote vào phần thiết kế XML Web service Chúng ta tạo hai đối tượng: sqlConnection1 sqlCommand1 Đối tượng sqlConnection1 có kiểu SqlConnection thể kết nối tới CSDL QuotableQuotes Đối tượng sqlCommand1 có kiểu SqlCommand thể SQL command nhận thông tin trích dẫn từ stored procedure Đổi tên sqlConnection1 sqlCommand1 thành quoteConnection cmdGetQuote Trước thực thi GetQuote, cần phải có phương thức giúp đỡ để tạo thơng tin trích dẫn ngâu nghiên SqlCommand cmdGetQuote đưa đến tham số Tham số ID ghi thơng tin trích dẫn CSDL Trong CSDL thơng tin trích dẫn có trường khóa có kiểu integer Trường khóa tự động tăng, lần tăng nên một, giá trị đầu tiền QuotableQuote XML Web service trả thơng tin trích dẫn ngẫu nghiên Để làm điều này, mã nguồn phải tạo số ngẫu nghiên từ giá trị lớn trường khóa CSDL Số lớn phải nhận từ CSDL Có stored procedure có tên GetLargestQuoteIdentifier CSDL làm điều Đặt GetLargestQuoteID vào stored procedure, kéo vào phần thiết kế Nó tạo đối tượng SqlCommand Đổi tên thành cmdGetLargestID Đoạn mã sau mô tả cách nhận giá trị trường ID lớn từ CSDL Đoạn mã lớp QuoteService Listing 7.1 66 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com public Int64 LargestID { get { object largestID = cmdGetLargestID.ExecuteScalar(); if(largestID== null || !(largestID is Int64)) return -1; } } return (Int64)largestID; Trước viết mã lệnh để nhận giá trị lớn trường khóa từ bảng Quotes Trước tiên, đối tượng cmdGetLargestID SqlCommand sử dụng để nhận giá trị lớn trường khóa từ CSDL Khi giá trị nhận kiểm tra Giá trị -1 trả giá trị không hợp lệ Sau nhận giá trị trường khóa lớn nhất, giá trị IP ngâu nghiên tạo Làm điều với lớp System.Random Lớp System.Random thể tạo số ngẫy nghiên Phương thức Next sử dụng để nhận số nguyên ngâu nghiên (Int32) Phương thức Next chấp nhận số nguyên (Int32), số thể giới hạn số ngẫu nghiên để phát sinh Trong ví dụ giá trị lớn ID tạo thông qua tham số Phương thức trả cấu trúc liệu khách hàng, cấu trúc chứa đựng thơng tin trích dẫn Listing 7.2 chứa đựng lớp Quote, lớp lưu trữ thơng tin trích dẫn Lớp đực đặt file QuoteService.aspx bên không gian tên Listing 7.2 public class Quote { public string String; public string Author; public string Date; } Phương thức GetQuote phải thực thi Phương thức GetQuote Web cần phải hồn thành cơng việc sau: Bước 1: Phát sinh giá trị Quote ID ngẫy nghiên Bước 2: Lấy liệu trích dẫn từ CSDL Bước 3: Điền vào cấu trúc liệu Quote Bước 4: Trả cấu trúc liệu Quote Trong đoạn mã Listing 7.3 đưa đến phương thức Hello World file QuoteService.aspx Listing 7.3 [WebMethod] 67 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com public Quote GetQuote() { quoteConnection.Open(); try { Int64 largestID = LargestID; if(-1 == largestID) return null; Random rand = new Random(DateTime.Now.Millisecond); Int64 randomQuoteId = rand.Next((int)largestID); cmdGetQuote.Parameters["@id"] = new SqlParameter("@id", randomQuoteId); SqlDataReader reader = cmdGetQuote.ExecuteReader(); if(!reader.Read()) return null; Quote q = new Quote(); q.String = reader.GetString(0); q.Author = reader.GetString(1); q.Date = reader.GetString(2); } // Get Quote String // Get author's name // Get the spoken date return q; } finally { quoteConnection.Close(); } Trước tiên kết nối với CSDL QuotableQuotes mở phương thức Open đối tượng quoteConnection Tiếp theo giá trị ngẫy nghiên giá trị lớn phát sinh phương thức Next lớp System.Random ID kiểm tra tính hợp lệ Nếu ID hợp lệ, giá trị thiết lập tham số có tên @id đối tượng cmdGetQuote SqlCommand Tiếp theo phương thức ExecuteReader đối tượng SqlComman gọi Phương thức thực thi câu lệnh CSDL Microsoft SQL Server trả đối tượng SqlDataReader, đối tượng cung cấp truy cập vào liệu trích dẫn Sau SqlDataReader điền vào cấu trúc liệu Quote Cuối cùng, cấu trúc liệu Quote trả về, khối finally đảm bảo kết nối CSDL đóng trường hợp có ngoại lệ Trước lớp khơng gian tên SqlClient sử dụng, khơng gian tên System.Data.SqlClient phải đưa vào file QuoteService.aspx Mặc định , Web service đưa vào không gian tên http://tempura.org Microsoft khuyến cáo XML Web service có khơng gian tên XML Điều cho phép ứng dụng client khác biệt với dịch vụ khác Web Có thể hồn thành cách áp dụng thuộc tính WebServiceAttribute lớp Web service Thêm dòng lệnh sau vào lớp QuoteService: [WebService(Namespace="http://netcfkickstart/QuoteService", Description="Provides access to famous quotes")] Thay đổi thuộc tính khơng gian tên QuoteService thêm mô tả ngắn gọn Web service 68 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Cùng với thuộc tính WebServiceAttribute ứng dụng vào Web service, QuotableQoutes Web service dịch thử Nhấn phím F5 để dịch gỡ lỗi XML Web service QuoteService đưa đến trang Web Trang Web chứa đựng chuỗi mô tả từ thuộc tính WebServiceAttribute Trang chứa nhãn liên kết Service Description Liên kết hiển thị định dạng file WSDL cho dịch vụ Có liên kết cùgn với text GetQuote Chọn liên kết đưa đến trang Web cho phép thử phương thức GetQuote Web Trang kiểm thử cung cấp vài thông tin Chọn vào nút Invoke trang Web gọi phương thức Web hiển thị thông tin trả Internet Explorer Sai XML ví dụ kết trả từ trang GetQuote: "Once you eliminate the impossible, whatever remains, no matter how improbable, must be the truth." Sherlock Holmes 1859-1930 Bên cạnh cung cấp khả kiểm thử Web service, trang cung cấp ba ví dụ cách yêu cầu Web service ví dụ trả Ví dụ bao gồm định dạng cho HTTP-POST, HTTP-GET, SOAP 7.2 Tìm hiểu NET Framework Web Service Client Sử dụng giao thức HTTP thông điệp SOAP, Web service client gửi yêu cầu thể thông tin trả từ Web server Hình 7.1 mơ tả thời gian tồn phương thức Web gọi từ client tới Web server Hình 7.1 Thời gian tồn phương thức Web gọi Web service Sau danh sách mô tả bước thời gian tồn phương thứcWeb method Bước 1: Ứng dụng client tạo thể lớp proxy Proxy lớp thông điệp giao tiếp ứng dụng client Web service Ứng dụng client gọi phương thức lớp proxy Bước 2: Proxy, sử dụng kiến trúc Web service bên phía client, hóa XML Web service yêu cầu đóng gói thông điệp SOAP Bước 3: Thông điệp SOAP sau gửi tới Web server thơng qua HTTP Bước 4: Kiến trúc Web service phía server nhận hủy hóa thơng điệp SOAP 69 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Bước 5: Sử dụng thông điệp SOAP, lớp thể Web service tạo Tiếp theo, đối số phương thức Web tạo từ thông điệp SOAP Cuối cùng, phương thứ Web gọi với đối số riêng Bước 6: Kiến trúc Web service phía server đóng gói đưa tham số trả giá trị vào thông điệp SOAP Bước 7: Thông điệp SOAP gửi trở lại client thông qua HTTP Bước 8: Kiến trúc Web service phía client nhận thơng điệp SOAP hủy hóa tham số đưa trả giá trị Giá trị trả lớp proxy Bước 9: Lớp proxy trả tham số đầu trả giá trị tới ứng dụng client 7.3 Tạo ứng dụng Client XML Web Service Bây chúng tạo client cho QuotableQuotes XML Web service Bắt đầu tạo ứng dụng Smart Device Application Thiết kế giao diện độ họa giống hình 7.2 Mã lệnh để gọi XML Web service đưa vào kiện click nút có nhãn Get Quote Trước tiên thêm tham chiếu đên XML Web service dự án Smart Device Application Hình 7.2 Giao diện người sử dụng QuotableQuotes client application 7.3.1 Thêm Web Reference vào Client Application Bây giờ, Web tham chiếu đến dịch vụ cần thiết thêm vào dự án client Để làm điều này, vào Solution Explorer, bấm chuột phải vào mục Reference, chọn Add Web References Hộp thoại Add Web Reference hình (hinhg 7.3) Hình 7.3 Hộp thoại Web Reference 70 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Hộp thoại Add Web Reference giúp xác định Web Services sử dụng chúng ứng dụng Hộp thoại hiển thị bốn liên kết Một liên kết cho phép xem tất XML Web services máy Ba liên kết khác liên kết đến ba UDDI servers/directories Liên kết "Browse UDDI Servers on the local machine" cho phép duyệt UDDI servers mạng cục hai liên kết khác có nhãn UDDI Directory UDDI Directory cung cấp truy cập tới dịch vụ đăng ký với Microsoft Liên kết "UDDI Directory" duyệt UDDI business registry để tìm cơng ty sản phẩm Web services Liên kết "Test Microsoft UDDI Directory" xác định XML Web services kiểm thử, có nghĩa sử dụng q trình phát triển Trong ví dụ QuotableQuotes XML Web service khơng đăng ký với UDDI Thay đăng ký QuotableQuotes XML Web service với UDDI, địa trang QuoteService.aspx đưa vào hộp thoại Add Web Reference Đưa vào địa URL sau, http://localhost/QuotableQuotesWebService/QuoteService.asmx, vào hộp text Address bấm Enter nút Go Hộp thoại download file WSDL cho QuoteService Web service Quá trình download hồn thành, bâm vào nút Add Reference 7.3.2 Xem lớp Proxy Khi thêm nút Add Reference bấm, Microsoft Visual Studio.NET phát sinh lớp proxy, lớp quản lý tương tác ứng dụng QuotableQuotes Web service Trong số trường hợp file class proxy cần hiển thị thay đổi, mặc định Solution Explorer khơng hiển thị file class proxy Có thể thay đổi cách chọn nút Show All Files Solution Explorer Bây mở rộng nút Web References nút bên Reference.map Hiện nút có nhãn Reference.cs Bấm đúp vào nút hiển thị mã nguồn lớp proxy Có vài thứ gọi từ lớp proxy Trước tiên, lớp proxy đưa đến khả mã hóa client để URL sử dụng giao tiếp với XML Web service Lớp proxy có thuộc tính URL kiểu chuỗi thể địa URL trang aspx XML Web service Từ Windows CE Pocket PC emulators có địa IP khác tất địa máy khác chạy, khơng có khả xác định XML Web service cách sử dụng địa URL mặc định lớp proxy cách sử dụng localhost tên server Thay vì, sử dụng tên server 71 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com địa IP, phần nên sử dụng địa IP để ngăn ngừa lỗi với giải pháp tên server Thứ hai, file lớp proxy, tồn lớp có tên Quote Lớp tương tự với lớp Quote tạo phía server để lưu thơng tin trích đẫn Trong Listing 7.4 chứa đựng khai báo lớp Quote từ file mã nguồn lớp proxy Listing 7.4 [System.Xml.Serialization.XmlTypeAttribute( Namespace="http://netcfkickstart/QuoteService")] public class Quote { /// public string String; /// public string Author; } /// public string Date; Thuộc tính System.Xml.Serialization.XmlTypeAttribute kiến trúc XML Web service phía client để sử dụng khơng gian tên http://netcfkickstart/QuoteService hóa đối tượng có kiểu Lớp Quote phải khai báo proxy, client server sử dụng cấu trúc liệu giống tương tác Tất cấu trúc liệu khách hàng đưa qua đường XML Web service khai báo để sử dụng client file mã nguồn lớp proxy 7.3.3 Sử dụng QuotableQuotes Web Service Bây chúng thêm dự án client lớp proxy tạo ra, XML Web service sử dụng ứng dụng clietn Mở phần thiết kế cho giao diện đồ họa client, bấm đúp vào nút Get Quote Sau hiển thị phần nhập mã lệnh cho kiện click nút, Trước thực thi phương thức này, không gian tên lớp proxy cần phải thêm vào Form1.cs Lớp proxy tạo không gian tên không gian tên client Thêm vào đoạn mã sau trong: using QuotableQuotesClient.QuoteServiceWebReference; Thao tác đơn giản cần để tạo thể lớp proxy, gọi phương thức GetQuote, hiển thị thơng tin trích dẫn giao diện đồ họa Thực thi thao tác cách sử dụng đoạn mã Listing 7.5 Listing 7.5 private void btnGetQuote_Click(object sender, System.EventArgs e) { QuoteService qs = new QuoteService(); Quote quote = qs.GetQuote(); if(null == quote) { MessageBox.Show("An error occurred retrieving a quote"); 72 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com } } Return; UpdateQuoteUI(quote); UpdateQuoteUI phương thức trợ giúp trích đoạn liệu từ đối tượng Quote cập nhật ứng dụng giao diện đồ họa Listing 7.6 chứa đoạn mã cho phương thức UpdateQuoteUI Listing 7.6 private void UpdateQuoteUI(Quote quote) { lblQuote.Text = quote.String; lblAuthor.Text = "- " + quote.Author; lblDate.Text = ( quote.Date == "Unknown" ) ? string.Empty : quote.Date; } 7.3.4 Asynchronous Consumption of the Simple Web Service QuotableQuotes XML Web service sử dụng quản lý đồng Đối tượng proxy tạo, phương thức GetQuote Web gọi Mã hóa sau đợi cho phương thức GetQuote trả lời Trong cơng việc nhận hồn thành, luon luon khơng hành động Cài đặt, hình dùng client cầu khẩn XML Web service mà khối xử lý ttheo thứ tự yêu cầu Lớp proxy cung cấp hai phương thức để thao tác với trạng thái không đồng Web XML service gọi: eginWebMethod EndWebMethod Trong trường hợp WebMethod với tên phương thức Web Ví dụ, proxy QuoteService tạo phương thức BeginGetQuote EndGetQuote Phương thức BeginWebMethod có hai tham số phần thêm vào tham số WebMethod đưa đến Cho đến GetQuote không chấp nhận tham số nào, BeginGetQuote chấp nhận hai tham số Trước tiên tham số System.AsyncCallback Thể phương thức gọi WebMethod hoàn thành Tham số thứ hai kiểu đối tượng mà muốn thể trạng thái WebMethod gọi Để tạo trạng thái client không đồng cách tạo hàm gốc gọi lại client Phương thức phải public hay static Nó phải khơng có giá trị trả ề chấp nhận tham số kiểu System.IAsyncResult Tham số thể kết async gọi Nó cho phép truy cập tới trạng tháo thông qua BeginWebMethod Thêm phương thức sau vào client: public static void GetQuoteCallBack(IAsyncResult ar) { MessageBox.Show("GetQuote completed"); } Bây thay đổi thực thi nút thao tác gọi trạng thái không đồng XML Web service Trước tiên thay thực thi nút thao tác với thực thi từ mã Listing 7.7: 73 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com Listing 7.7 private void btnGetQuote_Click(object sender, System.EventArgs e) { QuoteService qs = new QuoteService(); // Set the url of the proxy to the proper url of the web service AsyncCallback getQuoteCB = new AsyncCallback( QuotableQuotesClient.Form1.GetQuoteCallBack); } object[] callBackState = {qs, this}; qs.BeginGetQuote(getQuoteCB, callBackState); Đoạn mã trước tạo thể Web service Đối tượng AsycnCallback tạo thể trỏ phương thức GetQuoteCallBack client Cuối Web service gọi bắt đầu sử dụng phương thức BeginGetQuote Phương thức trả kết trước phương thức Web gọi hoàn thành Listing 7.8 chứa đựng thực thi phương thức GetQuoteCallBack Listing 7.8 public static void GetQuoteCallBack(IAsyncResult ar) { object[] callBackState = (object[])ar.AsyncState; QuoteService qs = (QuoteService)callBackState[0]; Form1 app = (Form1)callBackState[1]; Quote quote = qs.EndGetQuote(ar); if(null == quote) { MessageBox.Show("No quote object received."); return; } } app.UpdateQuoteUI(quote); 7.4 Sử dụng Web Service có sử dụng DataSet XML Web service trả cấu trúc liệu khách hàng .NET Compact Framework cung cấp khả truyền kiện nhiều liệu phức tạp, giống DataSet Mặc dù NET Compact Framework không hỗ trợ kiểu DataSet Gửi nhận DataSet thường xun hồn thành xác giống gửi cấu trúc liệu phẫn liệu đơn giản, chuỗ Phương thức Web đơn giản cần chấp nhận trả đối tượng System.Data.DataSet Trong tìm hiểu DataSet đầu tiên, gửi hoàn thành bảng Quotes tới client Cho phép ứng dụng offline đợi đến hiển thị trích dẫn đến người sử dụng bấm vào GetQuote Có stored procedure CSDL QuotableQuotes gọi GetQuotes, thủ tục trả tất thơng tin trích dẫn bảng Quotes Trở lại phần thiết kế XML Web service, kéo thủ tục vào phần thiết kế Thay đổi tên câu lệnh thành cmdGetQuotes Chúng ta 74 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com đưa phương thức Web GetQuotes QuoteService, phương thức trả DataSet DataSet điền vào cách sử dụng SqlDataAdapter chung với đối tượng SqlCommand cmdGetQuotes, mà thêm vào đối tượng Được má hóa sau: [WebMethod] public DataSet GetQuotes() { quoteConnection.Open(); try { DataSet quotesDS = new DataSet(); SqlDataAdapter quotesDa = new SqlDataAdapter(this.cmdGetQuotes); quotesDa.Fill(quotesDS); } return quotesDS; } finally { quoteConnection.Close(); } Dịch thử phương thức Web cách giống với phương thức GetQuote thử Lần kết trả trang dài XML tới trình đuyệt XML đơn giản dưa XML từ DataSet.WriteXml Bởi kiến trúc XML Web service hóa DataSet cách gọi phương thức DataSet.WriteXml Bay tạo ứng dụng client sử dụng DataSet từ Web service Bắt đầu cách tạo Smart Device Application giống cách tạo ứng dụng QuotableQuotesClient Tạo ứng dụng có giao diện đồ họa thêm đoạn mã sau vào lớp Form1: private DataSet quotesDataSet; private int curQuoteRowNdx; Bấm đúp vào nút Get Quotes đưa đến kiện click Listing 7.9 chứa mã nguồn Listing 7.9 private void btnQuote_Click(object sender, System.EventArgs e) { if(null == quotesDataSet) { QuoteService qs = new QuoteService(); // Set the proxy's url property to the correct url of the server } quotesDataSet = qs.GetQuotes(); curQuoteRowNdx = 0; if( quotesDataSet.Tables.Count = quotesDataSet.Tables[0].Rows.Count) curQuoteRowNdx = 0; 75 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com DataRow quote = quotesDataSet.Tables[0].Rows[curQuoteRowNdx]; curQuoteRowNdx++; } UpdateQuoteUI(quote, 0); Quotes DataSet download từ dịch vụ web quotes DataSet null Lần đâu tiên nút Get Quotes bấm DataSet có giá trị null Các lần sau gọi thơng tin trích dẫn lưu quotes DataSet cục , khơng cần thiết download lại Nếu quotes DataSet có giá trị null, sau đối tượng QuoteService proxy tạo, thuộc tính URL proxy cấu hình, phương thức Web GetQuotes gọi Tương ứng với DataRow nhận từ DataSet UpdateQuoteUI gọi, hiển thị thơng tin trích dẫn tới ngườiu sử dụng UpdateQuoteUI thực thi để sử dụng DataRow thay cho cấu trúc thơng tin trích dẫn Có tham số giá trị nguyên có tên offset kiểu Int32 Listing 7.10 chứa đựng thực thi phương thức UpdateQuoteUI Listing 7.10 private void UpdateQuoteUI(DataRow quote, int offset) { lblQuote.Text = (string)quote[offset]; lblAuthor.Text = "-" + quote[offset + 1]; lblDate.Text = "Unknown" == (string)quote[offset + 2] ? string.Empty : (string)quote[offset + 2]; } Dịch chạy ứng dụng Ứng dụng hành động xác làm trước, ngoại trừ trích dẫn lặp lại ngoại trừ hiển thị theo thứ tự không định trước 7.5 Sử dụng Web Service trả kiểu DataSet NET Compact Framework không hỗ trợ kiểu DataSet Nếu Web service sử dụng kiểu DataSet, NET Compact Framework clients không sử dụng Web service Đặc biệt, client bị lỗi cố gắng dịch proxy vào ứng dụng Có cơng việc xung quanh vấn đề sử dụng kiểu DataSet: - Thay đổi XML Web service để sử dụng DataSet chuẩn - Thay đổi XML Web Service để đưa DataSet chuẩn - Tạo XML Web service sử dụng kiểu DataSet nguyên chuyển DataSet chuẩn Có hai lựa chọn dường giống nhau, chúng khác Lựa chọn đề xuất loại bỏ toàn tất thể kiểu DataSet từ Web service sử dụng DataSet chuẩn mã hóa Đề xuất thứ hai thay đổi Web service để đưa 76 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com (send/receive) DataSet chuẩn Điều có nghĩa mã nguồn tạo sử dụng tiện ích kiểu DataSet, phương thức Web sử dụng DataSet chuẩn tham số giá trị trả Đơn giản ghi XML Web service để đưa DataSet chuẩn bên sử dụng kiểu DataSet Trở lại đối tượng QuoteableQuotes XML Web service, phần thiết kế XML Web Service designer Xác định bảng Quotes Server Explorer Nó sau đây: \SQL Servers\\QuotableQuotes\Tables Kéo bảng Quotes vào phần thiết kế Nó tạo SqlDataAdapter, để tạo kiểu DataSet cho bảng Quotes Đổi tên SqlDataAdapter thành daQuotesDS Bấm vào SqlDataAdapter, vào phần menu Data, chọn mục Generate DataSet Nó đưa đến hộp thoại Generate DataSet Thay đổi tên DataSet thành QuotesDataSet, bấm OK Nó sinh kiểu DataSet cho bảng Quotes Tạo phương thức Web tên GetTypeQuotes Phương thức Web trả DataSet chuẩn, bên sử dụng QuotesDataSet kiểu DataSet Listing 7.11 chứa đựng phương thức chuyển kiểu DataSet thành DataSet chuẩn trước trả người sử dụng Listing 7.11 [WebMethod] public DataSet GetTypedQuotes() { quoteConnection.Open(); try { QuotesDataSet quotesDS = new QuotesDataSet(); this.daQuotesDS.Fill(quotesDS); } return quotesDS; } finally { quoteConnection.Close(); } Để kết thúc ví dụ Quotable Quotes DataSet client cần phải thay đổi để sử dụng phương thức GetTypedQuotes Chỉ thao tác click nút cần thiết phải thay đổi Thao tác gọi GetTypeQuotes thay cho GetQuotes Mặc dù, tham số offset phương thức UpdateQuoteUI thay cho thành theo thứ tự bù cho cột ID DataRow Listing 7.12 chứa đựng đoạn mã cho phương thức Listing 7.12 private void btnQuote_Click(object sender, System.EventArgs e) { if(null == quotesDataSet) { QuoteService qs = new QuoteService(); 77 Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com // Set the proxy's url property to the correct url of the server } quotesDataSet = qs.GetTypedQuotes(); curQuoteRowNdx = 0; if(quotesDataSet.Tables.Count >= 0) { MessageBox.Show("Could not retreive the quotes dataset."); return; } if(curQuoteRowNdx >= quotesDataSet.Tables[0].Rows.Count) curQuoteRowNdx = 0; DataRow quote = quotesDataSet.Tables[0].Rows[curQuoteRowNdx]; curQuoteRowNdx++; } UpdateQuoteUI(quote, 1); 7.6 Tổng kết - NET Compact Framework cung cấp khả cho ứng dụng sử XML Web services - NET Compact Framework cung cấp khả cho sử dụng liệu đơn giản, chuỗi, liệu phức tạp, cấu trúc liệu người dùng tự định nghĩa DataSet - NET Compact Framework hỗ trợ đồng không đồng gọi XML Web service 78 ... Maximize Ứng dụng POCKET PC Ứng dụng WINDOWS CE NET Ứng dụng điền đầy vùng desktop, mà Ứng dụng có kích cỡ thuộc tồn vùng hình trừ phần menu start tính Size vùng menu Ứng dụng điền đầu hình Nó ẩn Ứng. .. đổi lập trình Ứng dụng demo Arnie.exe, làm để sử dụng nhóm điều khiển Hình 2.5 cho thấy ứng dụng chạy Pocket PC emulator Hình 2.5 Ứng dụng Arnie chạy Pocket PC 2002 emulator 19 Nguyễn Tuấn Anh –. .. Framework, Pocket PC Điều có nghĩa sử Nguyễn Tuấn Anh – email: tuananhk43@yahoo.com dụng Smart Device Extensions để phát triển ứng dụng Windows CE phát triển ứng dụng Windows 2000 or XP Tạo ứng dụng