本文將逐步告訴您,如何使用 ASP.NET 建置簡易的 XML Web
Service,以便在用戶端呼叫服務的方法時,從 Microsoft Access Northwind 範例資料庫擷取資料,並以 XML
格式將資料傳回給用戶端。在用戶端上,資料在顯示出來時會加上 Office 樞紐分析表和圖表元件。此外,本文還會示範如何使用 Visual Basic .NET
或 Visual Basic 6.0,為 XML Web Service 建置用戶端。
使用 ASP.NET 建立簡易的 XML Web Service
- 啟動 Visual Studio. NET。在 [檔案] 功能表上,按一下 [新增],然後按一下 [專案]。在 [專案類型] 下方,按一下 [Visual Basic 專案],然後按一下 [範本] 下的 [ASP.NET Web 服務]。根據預設會建立 Form1。
- 將 [位置] 變更為 http://localhost/MyDataService,然後按一下 [確定]。XML Web Service 專案會以 MyDataService 這個名稱建立在本機電腦上。繼承自 System.Web.Services.WebService 的 Class Service1,會依預設建立在 Service1.asmx 檔中。
- 在 [方案總管] 中,用滑鼠右鍵按一下 [Service1.asmx],然後選取 [檢視程式碼]。這樣會顯示 .asmx 頁面的程式碼後置檔案。
- 新增參考至 Microsoft ActiveX Data Objects
程式庫。如果要執行這項操作,請依照下列步驟執行:
- 在 [專案] 功能表上,按一下 [加入參考]。
- 按一下 [COM] 索引標籤,選取 [Microsoft ActiveX Data Objects 2.7 Library],再按 [選取],然後按一下 [確定]。
- 將下列方法新增至 Class Service1:
<WebMethod()> Public Function GetResultsAsAdoXML() As String
Dim myAdoRs As ADODB.Recordset
Dim myAdoConnection As New ADODB.Connection()
Dim mypersiststream As New ADODB.Stream()
Dim myConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _
"C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
Dim mySelect As String = "SELECT * from [Category Sales for 1997]"
myAdoConnection.ConnectionString = myConnectionString
myAdoConnection.Open()
myAdoRs = myAdoConnection.Execute(mySelect)
myAdoRs.Save(mypersiststream, ADODB.PersistFormatEnum.adPersistXML)
Return mypersiststream.ReadText
End Function
注意:如果您未將 Office XP 安裝到預設資料夾 (C:\Program Files\Microsoft
Office),請修改程式碼中的連接字串,以反映 Office 安裝的正確路徑。此外,如果您已經安裝 Office
2003,則可能必須跟著變更路徑。
- 在 [建置] 功能表上,按一下 [建置方案] 以建置 XML Web Service。
測試您的 XML Web Service
- 在 [偵錯] 功能表上,按一下 [開始]。Microsoft Internet Explorer 會啟動並瀏覽至 Service1.asmx 檔案。
- 按一下 GetResultsAsAdoXML 超連結。
- 按一下 [叫用] 以測試方法呼叫。Category Sales for 1997 查詢的結果會以 XML 資料列集架構格式顯示在新視窗中。資料列集 XML 文件會包含在 string 元素中。
- 在 Visual Studio .NET 的 [偵錯] 功能表上,按一下 [停止偵錯]。
為您的 XML Web Service 建置用戶端
本節將告訴您,如何建立用戶端以使用 MyDataService XML Web Service。您可以使用 Visual
Basic 6.0 或 Visual Basic .NET 建立用戶端。
為了示範目的,下列步驟將告訴您,如何在同一部電腦上建置測試用戶端當做 XML Web Service。不過,您可以在任何能夠瀏覽至 Web 服務所顯露之
Web Services Description Language (WSDL) 檔案的電腦上,建置測試用戶端。
使用 Visual Basic .NET
- 建立新的 Visual Basic .NET Windows 應用程式專案。根據預設會建立
Form1。
- 按下 CTRL+ALT+X 以顯示 [工具箱]。
- 在 [工具] 功能表上,按一下 [自訂工具箱]。在元件清單中選取下列項目,然後按一下 [確定]。
- Microsoft Office Chart 10.0
- Microsoft Office Data Source Control 10.0
- Microsoft Office PivotTable 10.0
元件的圖示會出現在工具箱中。
- 將 Chart 控制項、PivotTable 控制項及 Data Source 控制項新增至
Form1。請視需要調整表單與控制項的大小和位置。
- 將 Button 控制項新增至 Form1,然後將控制項的 Text 屬性設定為 Fill Data。
- 新增參考至範例 XML Web Service。如果要執行這項操作,請依照下列步驟執行:
- 在 [專案] 功能表上,按一下 [加入 Web 參考]。[加入 Web 參考] 對話方塊隨即會出現。
- 在 [位址] 文字方塊中,輸入
http://localhost/MyDataService/Service1.asmx?wsdl,然後按下
ENTER 鍵。WSDL 檔案會顯示在對話方塊中。
注意:如果 MyDataService 不是位於本機電腦上,請以 MyDataService 所在的 Web 伺服器名稱取代位址中的
localhost。 - 在對話方塊中,按一下 [加入參考]。
- 按兩下 Form1 上的 Button 控制項,然後使用下列程式碼取代 Button1_Click 處理常式:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Reference to the service.
Dim objClient As New localhost.Service1()
'Result obtained from the Service method.
Dim strresult As String
'The results will be stored on this disk file.
Dim datafile As String
datafile = System.IO.Directory.GetCurrentDirectory() + "\\mydata.xml"
'Call the Web service method GetResultsAsAdoXML, which returns the recordset as XML.
strresult = objClient.GetResultsAsAdoXML()
Dim oxmldoc As New System.Xml.XmlDocument()
'Load the XML recordset into the XML Document object.
oxmldoc.LoadXml (strresult)
'Save it to disk file.
oxmldoc.Save (datafile)
'Get data in the DataSource component.
If Len(AxDataSourceControl1.ConnectionString) = 0 Then
AxDataSourceControl1.ConnectionString = "provider=mspersist"
AxDataSourceControl1.RecordsetDefs.AddNew( _
datafile, AxDataSourceControl1.Constants.dscCommandFile, "ChartData")
End If
'Get data in Chart component.
Dim c
Dim cht As OWC10.ChChart
Dim ser As OWC10.ChSeries
Dim ax As OWC10.ChAxis
c = AxChartSpace1.Constants
' Clear the ChartSpace.
AxChartSpace1.Clear()
'DataSource to the Chart component.
AxChartSpace1.DataSource = AxDataSourceControl1.DefaultRecordset.DataSource
'Get the reference to Chart within the ChartSpace component.
cht = AxChartSpace1.Charts(0)
cht.Type = c.chChartTypeBarStacked
cht.HasLegend = True
cht.Legend.Position = c.chLegendPositionTop
cht.HasTitle = True
cht.Title.Caption = "Category Sales for 1997"
'Set the Chart data.
AxChartSpace1.SetData(OWC10.ChartDimensionsEnum.chDimCategories, 0, "CategoryName")
AxChartSpace1.SetData(OWC10.ChartDimensionsEnum.chDimValues, 0, "CategorySales")
ax = cht.Axes(c.chAxisPositionBottom)
'Set the series attributes.
ser = cht.SeriesCollection(0)
ser.Name = "Category Sales"
ser.Caption = ser.Name
ser.Marker.Size = 4
'Get Data in the PivotTable component.
Dim pview As OWC10.PivotView
AxPivotTable1.AutoFit = True
AxPivotTable1.ConnectionString = "provider=mspersist"
AxPivotTable1.CommandText = datafile
pview = AxPivotTable1.ActiveView
pview.AutoLayout()
pview.FilterAxis.Label.Visible = False
pview.RowAxis.Label.Visible = False
pview.ColumnAxis.Label.Visible = False
pview.TitleBar.Visible = False
End Sub
注意:如果 XML Web Service 位於不同的電腦上,請宣告 objClient 變數,如下所示: Dim objClient As New <servername>.Service1()
其中 servername 是 XML Web Service
所在的伺服器名稱。 - 注意:如果您使用的是 Office 2003,則可能需要跟著變更參考。
- 將下列程式碼加入至 Form1.vb 頂端:
Imports OWC10 = Microsoft.Office.Interop.OWC
- 在 [偵錯] 功能表上,按一下 [開始] 以建置並執行用戶端程式。Form1 隨即會出現。
- 按一下 [Fill Data],在 Chart 和 PivotTable 控制項中呈現資料。
使用 Visual Basic 6.0
XML Web Service 會使用「簡易物件存取通訊協定」(SOAP) 訊息與用戶端通訊。如果用戶端應用程式為 SOAP
感知的,用戶端應用程式就可以呼叫 XML Web Service 所顯露的方法。用戶端電腦不需要安裝 Visual Studio .NET,即可在 XML
Web Service 上呼叫方法。用戶端應該能夠將 XML Web Service 方法呼叫建構成 SOAP 要求,並接收方法呼叫的結果做為 SOAP
回應。SOAP Toolkit 可以讓您執行這項操作。
如需有關 SOAP Toolkit 的詳細資訊 (包括下載指示),請參閱下列
Microsoft Developer Network (MSDN) 網站:
如果要建立 Visual Basic 6.0 測試用戶端,以使用 MyDataService XML Web Service
中的方法,請依照下列步驟執行:
注意:這個測試用戶端要求電腦上必須安裝 SOAP Toolkit 2.0 Service Pack 2。
- 開啟 Visual Basic 6.0,並建立新的標準執行檔專案。根據預設會建立 Form1。
- 在 [專案] 功能表上,按一下 [參考]。將下列參考新增至專案:
- Microsoft Soap 型別程式庫
- Microsoft XML, v3.0
- 在 [專案] 功能表上,按一下 [元件]。選取 [Microsoft Office XP Web Components],然後按一下 [確定]。
- 將下列 Office Web 元件新增至 Form1:
- Microsoft Office Chart 10.0
- Microsoft Office Data Source Control 10.0
- Microsoft Office PivotTable 10.0
- 將 CommandButton 控制項新增至 Form1,然後將按鈕的 Caption 屬性設定為 Fill Data。
- 按兩下 CommandButton 控制項,然後使用下列程式碼取代 Command1_Click 處理常式:
Private Sub Command1_Click()
Dim osoapClient As MSSOAPLib.SoapClient
'Initialize the SOAP client object.
Set osoapClient = CreateObject("MSSOAP.SoapClient")
osoapClient.mssoapinit "http://localhost/MyDataService/Service1.asmx?wsdl", "Service1", "Service1Soap"
'DOM object to load the results.
Dim oXMLDoc As New MSXML2.DOMDocument
Dim strdirname As String
'File to store XML recordset.
strdirname = FileSystem.CurDir$ + "\mydata.xml"
Dim strxmlrecordset As String
'Call the WebService method.
strxmlrecordset = osoapClient.GetResultsAsAdoXML()
'Load the XML in the DOM document.
oXMLDoc.loadXML strxmlrecordset
'Save it to the disk file.
oXMLDoc.Save (strdirname)
'Get the data into the DataSourceControl1 component.
If Len(DataSourceControl1.ConnectionString) = 0 Then
DataSourceControl1.ConnectionString = "provider=mspersist"
' Add a RecordsetDef with name ChartData to the DataSourceControl1
DataSourceControl1.RecordsetDefs.AddNew strdirname, DataSourceControl1.Constants.dscCommandFile, "ChartData"
End If
'Get the Data into the Chart component.
Dim c
Dim cht As ChChart
Dim chart1 As ChChart
Dim ser As ChSeries
Dim ax As ChAxis
Set c = ChartSpace1.Constants
ChartSpace1.Clear
'DataSource to the Chart component.
ChartSpace1.DataSource = DataSourceControl1.DefaultRecordset.DataSource
' Draw the chart.
Set cht = ChartSpace1.Charts(0)
cht.Type = c.chChartTypeBarStacked
cht.HasLegend = True
cht.Legend.Position = c.chLegendPositionTop
cht.HasTitle = True
cht.Title.Caption = "Category Sales for 1997"
'Set the chart data.
ChartSpace1.SetData chDimCategories, 0, "CategoryName"
ChartSpace1.SetData chDimValues, 0, "CategorySales"
' Set the tick label spacing depending on the number of points plotted.
Set ax = cht.Axes(c.chAxisPositionBottom)
'Set the series attributes.
Set ser = cht.SeriesCollection(0)
ser.Name = "Category Sales"
ser.Caption = ser.Name
ser.Marker.Size = 4
'Get the data into the PivotTable.
PivotTable1.ConnectionString = "provider=mspersist"
PivotTable1.CommandText = strdirname
PivotTable1.AutoFit = True
Set pview = PivotTable1.ActiveView
pview.AutoLayout
pview.FilterAxis.Label.Visible = False
pview.RowAxis.Label.Visible = False
pview.ColumnAxis.Label.Visible = False
pview.TitleBar.Visible = False
End Sub
注意:如果 XML Web Service 位於不同的電腦上,請以 XML Web Service 所在的伺服器名稱取代 XML Web
Service 位址中的 localhost。
- 按下 F5 以建置並執行程式。Form1 隨即會出現。
- 按一下 [Fill Data],在圖表和樞紐分析表元件中呈現資料。
如需有關利用 ASP.NET 所建立之 XML Web Service
的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
301273?
(http://support.microsoft.com/kb/301273/
)
HOW TO:使用 Visual Basic .NET 撰寫簡單的 Web 服務
如需有關利用 ASP.NET 所建立之 XML Web Service 的詳細資訊,請參閱
Visual Studio .NET「說明」中的<使用 Web 服務設計 Web 程式>主題 (英文),或《Microsoft .NET Framework
開發人員指南》中的<ASP.NET Web 服務和 ASP.NET Web 服務用戶端>主題 (英文)。
如需有關 Web
服務基本概念,以及利用 ASP.NET 所建立之 XML Web Service 的詳細資訊,請造訪下列 Microsoft Developer
Network (MSDN) 網站:
如需有關具有 Visual Studio 和 Office XP Web Components 之 Microsoft Office
開發的詳細資訊,請造訪下列 MSDN 網站:
如需有關 Office XP Web Components
的詳細資訊,請按一下下面的文件編號以檢視「Microsoft 知識庫」中的文件:
286212?
(http://support.microsoft.com/kb/286212/
)
HOWTO:Use an XML DataSource with the Office Chart Component
235542?
(http://support.microsoft.com/kb/235542/
)
如何將 PivotTable Office Web 元件與 VB 搭配使用