首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQLXML 3.0 建置資料驅動 Web 服務:從虛擬目錄設定到 C# 與 SOAP Toolkit 用戶端

     編輯:關於SqlServer

SQLXML 3.0 概觀

SQLXML 3.0 是 SQL Server 2000 XML 支援的第三代版本,提供透過 HTTP、SOAP 存取資料庫、建立 Web 服務的完整中介層。核心元件為 ISAPI 擴充 sqlis3.dll,配合 MMC 管理單元設定 IIS 虛擬目錄。

建立範本虛擬目錄步驟

  1. 建立目錄結構:Projects\Template、Projects\SOAP。
  2. 開啟 MMC 管理單元「Configure IIS Support」(SQLXML 3.0 程式群組)。
  3. 在「預設網站」新增虛擬目錄,名稱設為資料庫名 (如 Northwind),根目錄指向 Projects。
  4. 安全性 索引標籤:選擇驗證方式。
  5. 資料來源:選取 SQL Server 執行個體與資料庫。
  6. 設定:勾選 Allow sql=... 與 Allow template queries。
  7. 虛擬名稱:新增 template,型別選 template,路徑指向 Projects\Template。

測試 XML 範本查詢

在 Projects\Template 建立 Customers.xml:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <SQL:QUERY client-side-xml="0">
    SELECT * FROM Customers FOR XML AUTO
  </SQL:QUERY>
</ROOT>

瀏覽器輸入 https://localhost/northwind/template/customers.xml 即可看到 XML 結果。

建立 SOAP Web 服務

  1. 同一虛擬目錄 設定 索引標籤勾選 Allow POST。
  2. 虛擬名稱 新增 soapprocedures,型別 SOAP,目錄指向 Projects\SOAP。
  3. Web 服務命名為 procedures (產生 procedures.ssc 與 procedures.wsdl)。
  4. 設定方法對應:選擇 SP (預存程序/UDF),瀏覽選取 SalesByCategory、CustOrderHist,方法名稱使用預設程序名。
  5. 瀏覽器驗證 WSDL:https://localhost/northwind/SOAP/procedures?wsdl。

C# 用戶端呼叫範例

  1. Visual Studio「加入 Web 參考」輸入 WSDL URL,參考命名為 localhost。
  2. 呼叫程式碼:
    localhost.procedures ws = new localhost.procedures();
    int returnValue;
    object[] result = ws.CustOrderHist("ALFKI", out returnValue);
  3. 回傳 object[] 需轉型:成功為 XmlElement,錯誤為 SqlMessage。輔助方法:
    public static XmlElement[] ProcessResult(object[] result) {
        List<XmlElement> elements = new List<XmlElement>();
        foreach (object o in result) {
            if (o is XmlElement) elements.Add((XmlElement)o);
            else if (o is SqlMessage) throw new Exception(((SqlMessage)o).Message);
        }
        return elements.ToArray();
    }
  4. 轉換為 DataSet 方便繫結 UI:
    public static DataSet GetDataSetFromXmlFragment(XmlElement xml) {
        DataSet ds = new DataSet();
        XmlTextReader reader = new XmlTextReader(xml.OuterXml, XmlNodeType.Element, new XmlParserContext(null, null, null, XmlSpace.None));
        ds.ReadXml(reader, XmlReadMode.InferSchema);
        return ds;
    }

呼叫範本與 UDF 作為 Web 服務

設定方式同預存程序,方法對應型別選 template 或 SP (UDF 亦屬 SP 類)。範本 GetAllCustomers 可直接傳回 XML 結果供用戶端程式捕獲。

SOAP Toolkit 2.0 用戶端 (Visual Basic 6.0)

引用 MSXML 4.0 與 SoapClient 元件:

Dim sc As New SoapClient
sc.MSSoapInit "https://localhost/northwind/SOAP/procedures?wsdl"
Dim nodeList As IXMLDOMNodeList
Set nodeList = sc.CustOrderHist("ALFKI")
For Each node In nodeList
    Debug.Print node.xml
Next

回傳為 IXMLDOMNodeList,需逐項迭代 IXMLDOMNode,配合 XSL 可美化輸出。

結語

SQLXML 3.0 讓未導入 .NET 的環境也能輕鬆建立資料驅動 Web 服務,統一以 SOAP/HTTP 呼叫預存程序、範本與 UDF,大幅降低中介層開發門檻。最新版本請參考 MSDN XML 專區。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved