監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價咨詢管理系統(tǒng) | 工程設(shè)計管理系統(tǒng) | 甲方項目管理系統(tǒng) | 簽約案例 | 客戶案例 | 在線試用
X 關(guān)閉

利用自定義Web控件構(gòu)造XML網(wǎng)絡(luò)服務(wù)應(yīng)用

申請免費試用、咨詢電話:400-8352-114

AMTeam.org

利用自定義Web控件構(gòu)造XML網(wǎng)絡(luò)服務(wù)應(yīng)用

本文將要告訴您:在全新的.NET平臺上,利用自定義Web控件來使用XML網(wǎng)絡(luò)服務(wù)是多么簡單。

什么是自定義Web控件?讓我們來看看微軟的解釋:“Web控件運行在Web服務(wù)器上,它包括表單控制(例如:按鈕和文本框等)和某些特殊用途的控件(例如:日歷控件等)。因此,Web控件允許您通過編程控制這些網(wǎng)頁元素。Web控件比HTML控件更加抽象,故它的目標模型不受HTML語法的限制”(原文見http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIWebControls.asp)。
稍后我們將利用Web控件在網(wǎng)頁上顯示一些文本。

微軟對“XML網(wǎng)絡(luò)服務(wù)”所下的定義是:“遵循標準的Internet協(xié)議,存在于Web服務(wù)器上的可編程實體”(原文見http://msdn.microsoft.com/library/en-us/cpref/html/frlrfSystemWebServices.asp)。

現(xiàn)在來創(chuàng)建一個簡單的Web服務(wù)器控件,它的功能是從可擴展標示語言(XML)網(wǎng)絡(luò)服務(wù)中讀取文本,并且顯示在網(wǎng)頁上;所用的工具是在DOS方式下的一個簡單的文本編輯器。這個例子非常實用,因為Web服務(wù)器控件是一個獨立的軟件包。您只需要發(fā)布編譯過的DLL文件,而用戶只需用鼠標把控件拖放到目標網(wǎng)頁即可,余下的工作全部由控件來完成。這樣,大多數(shù)Web應(yīng)用都可以實現(xiàn)高度的模塊化,因為所有的繁瑣工作都被封裝到控件內(nèi)部了。

第一步:取得數(shù)據(jù)

現(xiàn)在市場上有許多優(yōu)秀的XML網(wǎng)絡(luò)服務(wù)可供選擇。我將選擇一種能產(chǎn)生引文(出自名家或非名家之筆)的Web服務(wù)供本文使用。因此我們的第一任務(wù),就是要選定最合適的XML網(wǎng)絡(luò)服務(wù)。候選的公共Web服務(wù)有三個:

1.SANTRA Technology的iON服務(wù) - http://www.mysantra.com

2.XMethods的Web服務(wù) - http://www.xmethods.com

3.Sal Services的Web服務(wù)經(jīng)紀人 - http://www.salcentral.com

我個人偏愛http://www.mysantra.com,因為它提供許多高級功能:監(jiān)聽、警示、運行時間統(tǒng)計等,還有便利的比較功能。我們將要用到的內(nèi)容是Santra經(jīng)過反復(fù)搜索和比較之后才提供的。在Santra服務(wù)詳情(http://www.mysantra.com/MyService_Details.asp?service_id=358)里還包含WSDL文件的地址,現(xiàn)在把這個路徑復(fù)制到剪貼板里,在工程里將用它來建立Web服務(wù)引用。

第二步:準備工作

首先,創(chuàng)建工程文件夾,例如“c:inetpubWebControlsQuote”,導(dǎo)入Web服務(wù)引用。

然后,點擊Start->Run,鍵入cmd,回車,切換到工程所在目錄(cd c:inetpubWebControlsQuote),現(xiàn)在我們可以導(dǎo)入Web服務(wù)了。

在.NET框架里,有一個便利的公用程序wsdl.exe。

Web服務(wù)描述語言 (WSDL)工具為ASP.NET的Web服務(wù)生成代碼,位于WSDL的客戶端讀取文件、XSD schema和.discomap發(fā)現(xiàn)文件(譯者注:發(fā)現(xiàn)文件是包含所有可用Web服務(wù)摘要的XML文件)。(參見http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpgrfwebservicesdescriptionlanguagetoolwsdlexe.asp)。wsdl.exe能與disco.exe聯(lián)用。

鍵入wsdl/?可以得到wsdl.exe的簡單幫助信息(完整的描述已經(jīng)超出本文范圍)。這里用到的命令非常簡單: wsdl/namespace:SantraQuote http://rob.santra.com/webservices/public/quote/index.asmx?wsdl

輸出結(jié)果:

Microsoft (R) Web Services Description Language Utility
[Microsoft (R) .NET Framework, Version 1.0.3328.4]
Copyright (C) Microsoft Corporation 1998-2001. All rights reserved.

Writing file 'C:InetpubWebControlsQuoteQuoteService.cs'.

通過這條命令,我們將在名字空間SantraQuote下使用我們給出的URL提供的XML網(wǎng)絡(luò)服務(wù)生成一個代理服務(wù)類,相應(yīng)的類文件QuoteService.cs將被自動生成。

現(xiàn)在把我們的Web控件代碼加到代理服務(wù)類中。為什么要把代碼直接加進去?固然,其他Web服務(wù)程序可以通過定義另外的名字空間和類,并且引用代理服務(wù)類實現(xiàn)復(fù)用;但是,我們要發(fā)布的是單個自我包含的DLL文件,因此我們把控件代碼全部封裝到同一個文件和名字空間里。

第三步:編碼Web控件

在我們的QuoteService.cs文件里面有許多代碼用于加工XML網(wǎng)絡(luò)服務(wù)提供的內(nèi)容,不管它。首先,為名字空間UI和WebControls建立引用:

using System.Web.UI;
using System.Web.UI.WebControls;

然后,增加一個QuoteControl類,它只有一個方法(Render),其功能是調(diào)用QuoteService類的“Quote”方法:

public class QuoteControl : Control {
QuoteService QS = new QuoteService();
protected override void Render( HtmlTextWriter writer) {
writer.Write(QS.Quote());
}
}


現(xiàn)在,我們可以編譯名字空間了。在DOS提示狀態(tài)下,我們將會使用 C#編譯器csc。在編譯以前,先看看它的幫助信息(csc /?)。本例我們僅僅用到一個命令:

csc /t:library /out:C:InetpubwwwrootbinQuoteServiceControl.dll QuoteService.cs

輸出結(jié)果是:

Microsoft (R) Visual C# .NET Compiler version 7.00.9372.1
for Microsoft (R) .NET Framework version 1.0.3328
Copyright (C) Microsoft Corporation 2001. All rights reserved.

這個結(jié)果代表編譯成功。如果發(fā)生任何錯誤,它將會有詳細的解釋,并指出錯誤在哪里。因此,通過簡單的調(diào)試,控件就能通過編譯了。

命令行中的/t參數(shù)用來指定目標類型,我們用的是library,以便應(yīng)用于其他工程;此外,我們還用了/out:參數(shù)指定DLL文件名(QuoteServiceControl.dll)和目標路徑(本例在Web根目錄下的bin子目錄)。

忙了大半天,最終得到了什么?呃,請看看Web根目錄下的bin子目錄,您會發(fā)現(xiàn)QuoteServiceControl.dll這個文件,它包含了我們的Web服務(wù)器控件的全部代碼,并且能被ASPX頁面調(diào)用。

第四步:編碼ASP.NET測試頁

為了簡單起見,我們?nèi)匀皇褂米约旱奈谋揪庉嫵绦?,而不是Visual Studio.NET(VS.NET)工具。下面我們建立一個小小的測試頁(c:inetpubwwwrootquoteindex.aspx),僅有兩行代碼。

第一行:

  <%@ Register TagPrefix="CTL" Namespace="SantraQuote" Assembly="QuoteServiceControl" %>

請注意<%@ Register 后面的內(nèi)容。它的作用是注冊控件(DLL的文件名字)到指定的名字空間(SantraQuote),并且綁定到一個標記前綴(CTL)。此標記前綴可以任意命名,用于在表單中調(diào)用Web服務(wù)器控件。

第二行:

  <CTL:QuoteControl runat="server"/>

這一行就把我們的控件加到網(wǎng)頁中。

完整的代碼是:

  <%@ Register TagPrefix="CTL" Namespace="SantraQuote" Assembly="QuoteServiceControl" %>
  <html>
  <body>
   Random Quote:
   <CTL:QuoteControl runat="server" />
  </body>
  </html>

最后,我們在Web瀏覽器中測試該頁:在地址欄中輸入http://localhost/quote即可。第一次運行時,它會多花幾鐘進行編譯,隨后將隨機地顯示引文。若點擊Reload刷新,則頁面顯示將大大加快。
接下來,我們繼續(xù)討論如何在VS.NET環(huán)境中使用該控件。

第五步:在VS.NET中使用控件

首先,創(chuàng)建一個C# ASP.NET新工程“http://localhost/Quote.NET”。待IDE環(huán)境創(chuàng)建空白的新工程以后,我們就把組件加入工具箱(工具箱位于屏幕左邊):選擇Components,按右鍵,選擇Customize Toolbox,在.NET Framework Components里,點Browser,選中c:inetpubwwwrootbinQuoteServiceControl.dll。它將會在SantraQuote名字空間里找到兩個類,我們只需要其中的QuoteControl,故反選QuoteService,點OK?,F(xiàn)在可以看到QuoteControl出現(xiàn)在工具箱中。點擊它并且拖到Webform1.aspx頁面。此時控件立即開始從Web服務(wù)讀取文本并產(chǎn)生輸出了。您也可以使用HTML面板進行編輯和格式化輸出。測試前,把默認Web窗體重新命名為“index.aspx”。完成編輯以后點Play按鈕。系統(tǒng)將自動打開一個IE窗口,并連接到我們的網(wǎng)頁。嗯,一切順利。關(guān)掉IE瀏覽器,返回IDE環(huán)境?,F(xiàn)在您已經(jīng)在VS.NET環(huán)境下構(gòu)建了演示控件。以后在http://localhost/Quote.NET/index.aspx 就可以看到它了!

小結(jié)

衷心希望本文讓您對Web控件有了一個基本認識,并且可以動手構(gòu)造它了。如果您有任何疑問,請隨時與我們聯(lián)系。

發(fā)布:2007-03-25 10:27    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章: