intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình ứng dụng trên Pocket PC - Sử dụng XML Web Services - Nguyễn Anh Tuấn

Chia sẻ: Nguyen Quan | Ngày: | Loại File: PDF | Số trang:12

82
lượt xem
4
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Để tạo XML Web service trong Visual Studio.NET, sử dụng ASP.NET Web Service template. Tên dự án là QuotableQuotesWebService. XML Web service có tên là Service1 sẽ được tạo file Service1.asmx. Thay đổi tên XML Web service thành QuoteService và file nguồn .aspx là QuoteService.aspx.

Chủ đề:
Lưu

Nội dung Text: Lập trình ứng dụng trên Pocket PC - Sử dụng XML Web Services - Nguyễn Anh Tuấn

  1. Thư vi n H c li u M Vi t Nam module: m49409 1 S d ng XML Web Services∗ Nguy n Tu n Anh This work is produced by Thư vi n H c li u M Vi t Nam and licensed under the Creative Commons Attribution License † Tóm t t n i dung S d ng XML Web Services 1 T o XML Web Service Trư c khi t o .NET Compact Framework XML Web service client, XML Web Service client ph i s d ng đư c. Trong ph n này chúng ta t o m t Web service, và t o m t a .NET Compact Framework client đ s d ng Web service. XML Web service tr v thông tin c a m t cá nhân. Thông tin c a ngư i đó đư c lưu trong CSDL Microsoft SQL Server. Khi m t yêu c u đư c t o ra, XML Web service s truy v n m t trích d n ngâu nghiên và tr v thông tin trích d n. Chúng ta c n ph i thi t l p CSDL này trư c khi chúng ta có th ch y ví d này. Đ t o XML Web service trong Visual Studio.NET, s d ng ASP.NET Web Service template. Tên d án là QuotableQuotesWebService. XML Web service có tên là Service1 s đư c t o file Service1.asmx. Thay đ i tên XML Web service thành QuoteService và file ngu n .aspx là QuoteService.aspx. XML Web service s đưa ra m t phương th c web, GetQuote. Phương th c này tr v thông tin trích d n. Thông tin trích d n đư c l y t CSDL Microsoft SQL Server. Có m t th t c trong CSDL QuotableQuotes có tên là GetQuote, th t c này chúng ta s s d ng đ truy v n thông tin trích d n. Microsoft Visual Studio.NET s tr giúp trong quá trình vi t mã l nh đ tác đ ng đ n th t c này. Trư c tiên m Server Explorer và t o stored procedure GetQuote trong CSDL QuotableQuotes. Kéo stored procedure GetQuote vào trong ph n thi t k XML Web service. Chúng ta t o hai đ i tư ng: sqlConnection1 và sqlCommand1. Đ i tư ng sqlConnection1 có ki u SqlConnection và th hi n k t n i t i CSDL QuotableQuotes. Đ i tư ng sqlCommand1 có ki u là SqlCommand và th hi n SQL command s nh n thông tin trích d n t stored procedure. Đ i tên sqlConnection1 và sqlCommand1 l n lư t thành quoteConnection và cmdGetQuote. Trư c khi 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 m t tham s . Tham s này là ID c a b n ghi thông tin trích d n trong CSDL. Trong CSDL m i thông tin trích d n có m t trư ng khóa có ki u integer. Trư ng khóa này t đ ng tăng, m i l n tăng nên m t, và giá tr đ u ti n là 0. QuotableQuote XML Web service s tr v thông tin trích d n ng u nghiên. Đ làm đi u này, trong mã ngu n ph i t o m t s ng u nghiên t 0 và giá tr l n nh t c a trư ng khóa trong CSDL. S l n nh t đó ph i nh n t CSDL. Có m t stored procedure có tên là GetLargestQuoteIdentifier trong CSDL làm đi u này. Đ t GetLargestQuoteID vào stored procedure, và kéo vào ph n thi t k . Nó s t o m t đ 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 nh t t CSDL. Đo n mã này s trong l p QuoteService. Listing 7.1 ∗ Version 1.1: Jan 20, 2011 5:39 pm GMT+7 † http://creativecommons.org/licenses/by/3.0/ http://voer.edu.vn/content/m49409/1.1/
  2. Thư vi n H c li u M Vi t Nam module: m49409 2 public Int64 LargestID { get { object largestID = cmdGetLargestID.ExecuteScalar(); if(largestID== null || !(largestID is Int64)) return -1; return (Int64)largestID; } } Trư c khi vi t mã l nh đ nh n giá tr l n nh t c a trư ng khóa t b ng Quotes. Trư c tiên, đ i tư ng cmdGetLargestID SqlCommand đư c s d ng đ nh n giá tr l n nh t trư ng khóa t CSDL. Khi giá tr nh n v đư c ki m tra đúng. Giá tr -1 đư c tr v n u giá tr không h p l . Sau khi nh n giá tr c a trư ng khóa l n nh t, m t giá tr IP ngâu nghiên đư c t o. Làm đi u này cùng v i l p System.Random. L p System.Random th hi n t o m t s ng y nghiên. Phương th c Next s đư c s d ng đ nh n m t s nguyên ngâu nghiên (Int32). Phương th c Next có th ch p nh n m t s nguyên (Int32), s này th hi n gi i h n trên c a s ng u nghiên đ phát sinh. Trong ví d này giá tr l n nh t c a ID s đư c t o đư c thông qua như là m t tham s . Phương th c s tr v c u trúc d li u khách hàng, c u trúc này ch a đ ng thông tin trích d n. Listing 7.2 ch a đ ng l p Quote, l p này lưu tr thông tin trích d n. L p s đ c đ t trong file QuoteService.aspx bên trong c a không gian tên. Li st ing 7 . 2 public class Quote { public string String; public string Author; public string Date; } Phương th c GetQuote ph i đư c th c thi. Phương th c GetQuote Web c n ph i hoàn thành nh ng công vi c sau: Bư c 1: Phát sinh m t giá tr Quote ID ng y nghiên. Bư c 2: L y d li u trích d n t CSDL. Bư c 3: Đi n vào c u trúc d li u Quote. Bư c 4: Tr v c u trúc d li u Quote. Trong đo n mã Listing 7.3 đưa đ n phương th c Hello World trong file QuoteService.aspx. Listing 7.3 [WebMethod] 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"] = http://voer.edu.vn/content/m49409/1.1/
  3. Thư vi n H c li u M Vi t Nam module: m49409 3 new SqlParameter("@id", randomQuoteId); SqlDataReader reader = cmdGetQuote.ExecuteReader(); if(!reader.Read()) return null; Quote q = new Quote(); q.String = reader.GetString(0); // Get Quote String q.Author = reader.GetString(1); // Get author’s name q.Date = reader.GetString(2); // Get the spoken date return q; } finally { quoteConnection.Close(); } } Trư c tiên k t n i v i CSDL QuotableQuotes đã đư c m b ng phương th c Open trên đ i tư ng quoteConnection. Ti p theo m t giá tr ng y nghiên gi a 0 và giá tr l n nh t đư c phát sinh b ng phương th c Next trên l p System.Random. ID đư c ki m tra tính h p l . N u ID h p l , giá tr đó đư c thi t l p như là tham s có tên là @id1 c a đ i tư ng cmdGetQuote SqlCommand. Ti p theo phương th c ExecuteReader c a đ i tư ng SqlComman đư c g i. Phương th c này th c thi câu l nh đ i v i CSDL Microsoft SQL Server và tr v m t đ i tư ng SqlDataReader, đ i tư ng này cung c p truy c p vào d li u trích d n. Sau đó SqlDataReader đi n vào c u trúc d li u Quote. Cu i cùng, c u trúc d li u Quote đư c tr v , và kh i finally đ m b o r ng k t n i CSDL đư c đóng trong trư ng h p có ngo i l . Trư c khi l p trong không gian tên SqlClient có th đư c s d ng, không gian tên System.Data.SqlClient ph i đư c đưa vào trong file QuoteService.aspx. M c đ nh , m t Web service m i đư c đưa vào không gian tên http2 :3 //tempura.org4 . Microsoft khuy n cáo r ng m i XML Web service có m t không gian tên XML duy nh t. Đi u này cho phép ng d ng client ch ra s khác bi t nó v i các d ch v khác trên Web. Có th hoàn thành b ng cách áp d ng thu c tính WebServiceAttribute đ i v i l p Web service. Thêm các 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 c a QuoteService như là thêm m t mô t ng n g n v Web service. Cùng v i thu c tính WebServiceAttribute ng d ng vào Web service, QuotableQoutes Web service có th đư c d ch và th . Nh n phím F5 đ d ch và g l i XML Web service. QuoteService đưa đ n trang Web. Trang Web này ch a đ ng chu i mô t t thu c tính WebServiceAttribute. Trang ch a m t nhãn liên k t Service Description. Liên k t này s 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 đó s đưa đ n trang Web cho phép th phương th c GetQuote Web. Trang ki m th này cung c p m t vài thông tin. Ch n vào nút Invoke trên trang Web s g i phương th c Web và hi n th thông tin tr v trong Internet Explorer. Sai đây XML là m t ví d v k t qu tr v t trang GetQuote: 1 @id 2 http://tempura.org/ 3 http://tempura.org/ 4 http://tempura.org/ http://voer.edu.vn/content/m49409/1.1/
  4. Thư vi n H c li u M Vi t Nam module: m49409 4 "Once you eliminate the impossible, whatever remains, no matter how improbable, must be the truth." Sherlock Holmes 1859-1930 Bên c nh s cung c p kh năng ki m th Web service, trang này còn cung c p ba ví d v cách yêu c u Web service và ví d tr v . Ví d này bao g m đ nh d ng cho HTTP-POST, HTTP-GET, và SOAP. 2 Tìm hi u .NET Framework Web Service Client S d ng giao th c HTTP và thông đi p SOAP, Web service client có th g i yêu c u và th hi n thông tin tr v t Web server. Hình 7.1 mô t th i gian t n t i c a m t phương th c Web g i t client t i Web server. Figure 1: Th i gian t n t i c a phương th c Web g i m t Web service. Sau đây là danh sách mô t 9 bư c trong th i gian t n t i c a phương th cWeb method. Bư c1: ng d ng client t o m t th hi n l p proxy. Proxy là l p thông đi p giao ti p gi a ng d ng client và Web service. ng d ng client g i m t phương th c trên l p proxy Bư c2: Proxy, s d ng ki n trúc Web service bên phía client, tu n t hóa XML Web service yêu c u và đóng gói nó trong 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 và h y tu n t hóa thông đi p SOAP. Bư c5: S d ng thông đi p SOAP, l p th hi n Web service đư c t o. Ti p theo, đ i s c a phương th c Web đư c t o t thông đi p SOAP. Cu i cùng, phương th Web đư c g i cùng v i đ i s riêng. Bư c6: Ki n trúc Web service phía server đóng gói đưa ra tham s và tr v giá tr vào thông đi p SOAP. Bư c 7: Thông đi p SOAP đư c g i tr l i client thông qua HTTP. Bư c8: Ki n trúc Web service phía client nh n thông đi p SOAP và h y tu n t hóa tham s đưa ra và tr v giá tr . Giá tr đư c tr v l p proxy. Bư c 9: L p proxy tr v tham s đ u ra và tr v giá tr t i ng d ng client. 3 T o m t ng d ng Client XML Web Service. Bây gi chúng t o m t client cho QuotableQuotes XML Web service. B t đ u t o m t 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 s đư c đưa vào trong s ki n click trên nút có nhãn Get Quote. Trư c tiên thêm m t tham chi u đên XML Web service trong d án Smart Device Application. http://voer.edu.vn/content/m49409/1.1/
  5. Thư vi n H c li u M Vi t Nam module: m49409 5 Figure 2: Giao di n ngư i s d ng QuotableQuotes client application 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, và ch n Add Web References .... H p tho i Add Web Reference như hình (hinh sau) Figure 3: H p tho i Web Reference. H p tho i Add Web Reference giúp xác đ nh Web Services và s d ng chúng trong 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 chúng ta xem t t c XML Web services trên 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 chúng ta duy t UDDI servers trên m ng c c b . hai liên k t khác có nhãn là UDDI Directory và UDDI Directory cung c p truy c p t i d ch v đã đư c đăng ký v i Microsoft. Liên k t "UDDI Directory" duy t UDDI business registry đ tìm công ty và s n ph m http://voer.edu.vn/content/m49409/1.1/
  6. Thư vi n H c li u M Vi t Nam module: m49409 6 Web services. Liên k t "Test Microsoft UDDI Directory" xác đ nh XML Web services ki m th , có nghĩa là đư c s d ng trong quá trình phát tri n. Trong ví d này QuotableQuotes XML Web service s không đăng ký v i UDDI. Thay vì đăng ký QuotableQuotes XML Web service cùng v i UDDI, đ a ch trang QuoteService.aspx s đư c đưa vào trong h p tho i Add Web Reference. Đưa vào đ a ch URL sau, http://localhost/QuotableQuotesWebService/QuoteService.asm x6 , vào trong h p text Address và b m Enter ho c nút Go. H p tho i s download file WSDL cho QuoteService Web service. Quá trình download đư c hoàn thành, bâm vào nút Add Reference. 3.2 Xem l p Proxy Khi thêm nút Add Reference đư c b m, Microsoft Visual Studio.NET phát sinh m t l p proxy, l p này s qu n lý tương tác gi a ng d ng QuotableQuotes Web service. Trong m t s trư ng h p file class proxy có th c n hi n th ho c thay đ i, nhưng m c đ nh Solution Explorer không hi n th file class proxy. Có th thay đ i b ng cách ch n nút Show All Files trong Solution Explorer. Bây gi m r ng nút Web References và nút bên dư i Reference.map. Hi n ra m t nút có nhãn Reference.cs. B m đúp vào nút đó s hi n th mã ngu n c a l p proxy. Có m t vài th s đư c g i t l p proxy. Trư c tiên, l p proxy đưa đ n kh năng mã hóa client đ ch ra URL s s d ng khi giao ti p v i XML Web service. L p proxy có thu c tính URL ki u chu i th hi n đ a ch URL trang .aspx c a XML Web service. T khi đó Windows CE và Pocket PC emulators có m t đ a ch IP khác t t c các đ a ch máy khác đang ch y, chúng ta s không có kh năng xác đ nh XML Web service b ng cách s d ng đ a ch URL m c đ nh trong l p proxy b ng cách s d ng localhost như là tên server. Thay vì, s d ng tên server ho c đ a ch IP, trong ph n này chúng ta nên s d ng đ a ch IP đ ngăn ng a l i cùng v i gi i pháp tên server. Th hai, trong file l p proxy, t n t i m t l p có tên Quote. L p này tương t v i l p Quote đã đư c t o trên phía server đ lưu d thông tin trích đ n. Trong Listing 7.4 ch a đ ng khai báo l p Quote t file mã ngu n c a 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 ch ra ki n trúc XML Web service phía client đ s d ng không gian tên http7 :8 //netcfkickstart/QuoteService9 khi tu n t hóa m t đ i tư ng có ki u này. L p Quote ph i khai báo trong proxy, vì v y client và server có th s d ng c u trúc d li u gi ng nhau khi tương tác. T t c c u trúc d li u khách hàng đư c đưa ra qua đư ng XML Web service s đư c khai báo đ s d ng b ng client trong file mã ngu n l p proxy. 5 http://localhost/QuotableQuotesWebService/QuoteService.asmx 6 http://localhost/QuotableQuotesWebService/QuoteService.asmx 7 http://netcfkickstart/QuoteService 8 http://netcfkickstart/QuoteService 9 http://netcfkickstart/QuoteService http://voer.edu.vn/content/m49409/1.1/
  7. Thư vi n H c li u M Vi t Nam module: m49409 7 3.3 S d ng QuotableQuotes Web Service Bây gi chúng thêm m t d án client và l p proxy đã đư c t o ra, XML Web service có th s d ng b ng ng d ng clietn. M ph n thi t k cho giao di n đ h a client, và b m đúp vào nút Get Quote. Sau đó hi n th ph n nh p mã l nh cho s ki n click c a nút, Trư c khi th c thi phương th c này, không gian tên c a l p proxy c n ph i đư c thêm vào Form1.cs. L p proxy đã đư c t o trong không gian tên dư i không gian tên c a client. Thêm vào đo n mã sau trong: using QuotableQuotesClient.QuoteServiceWebReference; Thao tác đơn gi n c n đ t o m t th hi n c a l p proxy, g i phương th c GetQuote, và hi n th thông tin trích d n trong giao di n đ h a. Th c thi thao tác b ng cách s d ng đo n mã trong 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"); Return; } UpdateQuoteUI(quote); } UpdateQuoteUI là phương th c tr giúp trích đo n d li u t đ i tư ng Quote và 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; } 3.4 Asynchronous Consumption of the Simple Web Service QuotableQuotes XML Web service đã đư c s d ng trong qu n lý đ ng b . Đ i tư ng proxy đư c t o, và phương th c GetQuote Web đư c g i. Mã hóa sau đó đ i cho phương th c GetQuote tr l i. Trong khi công vi c nh n đư c hoàn thành, nó luon luon không hành đ ng. Cài đ t, hình dùng client đang c u kh n m t 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 b Web XML service g i: eginWebMethod và EndWebMethod. Trong m i trư ng h p WebMethod cùng v i tên c a phương th c Web. Ví d , proxy QuoteService t o ra phương th c BeginGetQuote và EndGetQuote. Phương th c BeginWebMethod có hai tham s trong ph n thêm vào tham s WebMethod đưa đ n. Cho đ n khi GetQuote không ch p nh n b t kỳ tham s nào, BeginGetQuote ch ch p nh n hai tham s . Trư c tiên là tham s c a System.AsyncCallback. Th hi n phương th c s đư c g i trong WebMethod đã đư c hoàn thành. Tham s th hai là ki u đ i tư ng và có th b t kỳ cái gì mà chúng ta mu n th hi n tr ng thái c a WebMethod g i. http://voer.edu.vn/content/m49409/1.1/
  8. Thư vi n H c li u M Vi t Nam module: m49409 8 Đ t o m t tr ng thái client không đ ng b b ng cách t o m t hàm g c g i l i trên client. Phương th c ph i là public hay static. Nó ph i không có giá tr tr và ch p nh n m t tham s c a ki u System.IAsyncResult. Tham s này th hi n k t qu c a async g i. Nó cho phép truy c p t i tr ng tháo chúng ta thông qua BeginWebMethod. Thêm các phương th c sau vào client: public static void GetQuoteCallBack(IAsyncResult ar) { MessageBox.Show("GetQuote completed"); } Bây gi chúng ta thay đ i s th c thi c a nút thao tác g i tr ng thái không đ ng b XML Web service. Trư c tiên thay th th c thi hi n t i c a nút thao tác cùng v i s th c thi t mã 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 m t th hi n c a Web service. Đ i tư ng AsycnCallback đư c t o th hi n m t con tr phương th c GetQuoteCallBack trên client. Cu i cùng Web service g i b t đ u s d ng phương th c BeginGetQuote. Phương th c này tr v k t qu trư c khi phương th c Web g i hoàn thành. Listing 7.8 ch a đ ng s th c thi c a 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); } 4 S d ng Web Service có s d ng DataSet XML Web service đã tr v c u trúc d li u khách hàng. .NET Compact Framework cung c p kh năng truy n s ki n nhi u d li u ph c t p, gi ng như là DataSet. M c dù .NET Compact Framework không h tr ki u DataSet. http://voer.edu.vn/content/m49409/1.1/
  9. Thư vi n H c li u M Vi t Nam module: m49409 9 G i và nh n m t DataSet thư ng xuyên đư c hoàn thành chính xác gi ng như là g i c u trúc d li u ho c nh ng ph n d li u đơn gi n, như là chu . Phương th c Web đơn gi n c n ch p nh n ho c tr v đ i tư ng System.Data.DataSet. Trong khi tìm hi u DataSet đ u tiên, chúng ta g i hoàn thành m t b ng Quotes t i client. Cho phép ng d ng offline và đ i đ n khi hi n th trích d n đ n khi ngư i s d ng b m vào GetQuote. Có m t stored procedure trong CSDL QuotableQuotes g i là GetQuotes, th t c này tr v t t c thông tin trích d n trong b ng Quotes. Tr l i ph n thi t k XML Web service, và kéo th t c này vào trong ph n thi t k . Thay đ i tên câu l nh này thành cmdGetQuotes. Chúng ta s đưa ra phương th c Web GetQuotes trên QuoteService, phương th c này tr v m t DataSet. DataSet s đư c đi n vào b ng cách s d ng SqlDataAdapter chung v i đ i tư ng SqlCommand cmdGetQuotes, mà chúng ta thêm vào đ i tư ng. Đư c má hóa như 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 và th phương th c Web trong cách gi ng v i phương th c GetQuote đã đư c th . L n này k t qu s tr v m t trang dài XML t i trình đuy t. XML đơn gi n dưa ra XML t DataSet.WriteXml. B i vì ki n trúc XML Web service tu n t hóa m t DataSet b ng cách g i phương th c DataSet.WriteXml. Bay gi chúng ta t o m t ng d ng client s d ng DataSet t Web service. B t đ u b ng cách t o m t Smart Device Application gi ng như cách t o ng d ng QuotableQuotesClient. T o ng d ng có giao di n đ h a và 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 s đưa đ n s ki n click. Listing 7.9ch 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; } http://voer.edu.vn/content/m49409/1.1/
  10. Thư vi n H c li u M Vi t Nam module: m49409 10 if( quotesDataSet.Tables.Count = quotesDataSet.Tables[0].Rows.Count) curQuoteRowNdx = 0; DataRow quote = quotesDataSet.Tables[0].Rows[curQuoteRowNdx]; curQuoteRowNdx++; UpdateQuoteUI(quote, 0); } Quotes DataSet đư c download t d ch v web khi quotes DataSet là null. L n đâu tiên nút Get Quotes đư c b m DataSet có giá tr null. Các l n sau đư c g i thông tin trích d n đư c lưu trong quotes DataSet c c b , vì v y không c n thi t download l i. N u quotes DataSet có giá tr null, sau đó đ i tư ng QuoteService proxy đư c t o, thu c tính URL c a proxy đư c c u hình, và phương th c Web GetQuotes đư c g i. Tương ng v i DataRow đư c nh n v t DataSet và UpdateQuoteUI đư c g i, cái này hi n th thông tin trích d n t i ngư iu s d ng. UpdateQuoteUI đư c th c thi đ s d ng m t DataRow thay cho c u trúc thông tin trích d n. Có m t tham s giá tr nguyên có tên offset ki u Int32. Listing 7.10 ch a đ ng s th c thi c a 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 và ch y ng d ng. ng d ng s hành đ ng chính xác như nó đã làm trư c, ngo i tr trích d n s l p l i ngo i tr hi n th theo th t không đ nh trư c. 5 S d ng Web Service tr v 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 s không s d ng đư c Web service. Đ c bi t, client s b l i khi 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 ra DataSet chu n. - T o m t XML Web service m i s d ng ki u DataSet nguyên b n và chuy n nó DataSet chu n. Có hai l a ch n có th dư ng như gi ng nhau, nhưng chúng khác nhau. L a ch n đ xu t là chúng ta lo i b toàn b t t c th hi n c a ki u DataSet t Web service và s d ng DataSet chu n trong khi mã hóa. Đ xu t th hai chúng ta có th thay đ i Web service đ đưa ra (send/receive) ch DataSet chu n. Đi u này có nghĩa là trong mã ngu n có th t o và s d ng ti n ích ki u DataSet, nhưng phương th c Web ch có th s d ng DataSet chu n như là tham s giá tr tr v . Đơn gi n là ghi ra m t XML Web service đ đưa ra DataSet chu n nhưng bên trong s d ng ki u DataSet. Tr l i đ i tư ng QuoteableQuotes XML Web service, và ph n thi t k XML Web Service designer. Xác đ nh b ng Quotes trong Server Explorer. Nó s như sau đây: \SQLServers\\QuotableQuotes\Tables. http://voer.edu.vn/content/m49409/1.1/
  11. Thư vi n H c li u M Vi t Nam module: m49409 11 Kéo b ng Quotes vào ph n thi t k . Nó t o ra m t SqlDataAdapter, đ t o m t 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, và ch n m c Generate DataSet . . . Nó s đưa đ n h p tho i Generate DataSet. Thay đ i tên c a DataSet m i thành QuotesDataSet, và b m OK. Nó s sinh ra ki u DataSet cho b ng Quotes. T o m t phương th c Web tên là GetTypeQuotes. Phương th c Web s tr v DataSet chu n, nhưng bên trong nó s s d ng QuotesDataSet ki u DataSet. Listing 7.11 ch a đ ng m t phương th c s chuy n ki u DataSet thành DataSet chu n trư c khi tr v 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 v Quotable Quotes DataSet client c n ph i thay đ i đ s d ng phương th c GetTypedQuotes. Ch thao tác click c a nút c n thi t ph i thay đ i. Thao tác s g i GetTypeQuotes thay cho GetQuotes. M c dù, tham s offset c a phương th c UpdateQuoteUI s thay cho 1 thành 0 theo th t bù cho c t ID trong DataRow. Listing 7.12 ch a đ ng đo n mã m i cho phương th c này. Listing 7.12 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.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++; http://voer.edu.vn/content/m49409/1.1/
  12. Thư vi n H c li u M Vi t Nam module: m49409 12 UpdateQuoteUI(quote, 1); } 6 T ng k t - .NET Compact Framework cung c p kh năng cho ng d ng s XML Web services. - .NET Compact Framework cung c p kh năng cho s d ng d li u đơn gi n, như là chu i, d li u ph c t p, như là c u trúc d li u ngư i dùng t đ nh nghĩa và DataSet. - .NET Compact Framework h tr đ ng b và không đ ng b g i XML Web service.. http://voer.edu.vn/content/m49409/1.1/
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2