小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

使用 SOAP Toolkit 2.0 將現(xiàn)有代碼作為 Web 服務(wù)提供

 希望蠟炬 2013-01-22

使用 SOAP Toolkit 2.0 將現(xiàn)有代碼作為 Web 服務(wù)提供

使用 .NET 建立分布式應(yīng)用程序 
Steve Kirk 和 Priya Dhawan
Microsoft Developer Network

摘要:本文介紹了使用 Microsoft SOAP Toolkit 版本 2.0 將現(xiàn)有 Microsoft Visual Basic 6.0 代碼作為 Web 服務(wù)提供時(shí)所進(jìn)行的數(shù)據(jù)轉(zhuǎn)換。

目錄

簡(jiǎn)介

Microsoft?SOAP Toolkit 版本 2.0 簡(jiǎn)化了將現(xiàn)有代碼作為 Web 服務(wù)提供和使用的任務(wù),MSDN Library 的 SDK 部分中的 SOAP Toolkit 2.0 文檔(英文)對(duì)此進(jìn)行了說明。在服務(wù)器端執(zhí)行的一些主要功能是,在現(xiàn)有代碼傳遞的不同數(shù)據(jù)類型的數(shù)據(jù)和 XML 消息(在 Web 服務(wù)客戶機(jī)和服務(wù)器之間使用)之間進(jìn)行轉(zhuǎn)換。簡(jiǎn)單數(shù)據(jù)類型的轉(zhuǎn)換可以自動(dòng)處理,較為復(fù)雜的數(shù)據(jù)類型則需要開發(fā)人員提供轉(zhuǎn)換代碼。

評(píng)估現(xiàn)有代碼是否適合于作為 Web 服務(wù)提供時(shí),本文討論的數(shù)據(jù)轉(zhuǎn)換問題并不是唯一需要考慮的問題。應(yīng)考慮的其它因素包括對(duì)象和狀態(tài)模型、返回的數(shù)據(jù)大小、如何表示已經(jīng)成功、如何返回錯(cuò)誤信息、安全模型(包括訪問控制、身份驗(yàn)證和加密)、執(zhí)行模型(同步或異步)、如何分發(fā)代碼,以及事務(wù)模型(COM+ 事務(wù)或聲明型事務(wù)),等等。這些問題將在即將發(fā)表的體系結(jié)構(gòu)主題(英文)文章中進(jìn)行討論。

現(xiàn)有代碼提供的數(shù)據(jù)類型

要介紹現(xiàn)有代碼傳遞的所有數(shù)據(jù)類型的轉(zhuǎn)換是一個(gè)相當(dāng)大的工程,因此本文介紹了某些最常用的數(shù)據(jù)類型。通過 SOAP Toolkit 代碼進(jìn)行轉(zhuǎn)換的一個(gè)替代方案是使用 XML 接口對(duì)現(xiàn)有代碼進(jìn)行擴(kuò)展。本文討論了以下數(shù)據(jù)類型的轉(zhuǎn)換方法:

  • ADO 2x Command 對(duì)象
  • ADO2x Recordset 對(duì)象
  • Stream 對(duì)象
  • XMLDOM 對(duì)象

ADO 2x Command 對(duì)象

直接訪問數(shù)據(jù)庫的現(xiàn)有代碼經(jīng)常會(huì)提供 Microsoft ActiveX? 數(shù)據(jù)對(duì)象 (ADO) 的 Command 對(duì)象。雖然不能在運(yùn)行于不同進(jìn)程中的應(yīng)用程序?qū)又g傳遞 Command 對(duì)象,但可以在同一進(jìn)程內(nèi)傳遞該對(duì)象。對(duì)于單行數(shù)據(jù)實(shí)體,通過 Command 對(duì)象的輸出參數(shù)返回?cái)?shù)據(jù)比通過 ADO 記錄集返回?cái)?shù)據(jù)效率更高。因此,ADO Command 對(duì)象對(duì)于返回單行實(shí)體數(shù)據(jù)十分有用。

讀數(shù)據(jù)

以下示例中的現(xiàn)有代碼返回一個(gè) ADO Command 對(duì)象,它包含作為輸出參數(shù)的數(shù)據(jù)。在傳遞給 Web 服務(wù)的客戶之前,Custom Type Mapper 中的代碼使用 SoapSerializer 對(duì)象對(duì) Command 對(duì)象進(jìn)行轉(zhuǎn)換:

With SoapSerializer    
    `轉(zhuǎn)換 CommandType
    .startElement "CommandType"
    .writeString Cmd.CommandType
    .endElement
    `轉(zhuǎn)換 CommandText
    .startElement "CommandText"
    cmdText = Cmd.CommandText
    cmdText = Left(Cmd.CommandText, Len(cmdText) - 8)
    cmdText = Right(cmdText, Len(cmdText) - 7)    
    .writeString cmdText
    .endElement
    `轉(zhuǎn)換 Parameters 集合
    .startElement "Parameters"
    For i = 0 To oCmd.Parameters.Count - 1
        .startElement Right(oCmd.Parameters(i).Name, _
            Len(oCmd.Parameters(i).Name) - 1)
            .startElement "Direction"
            .writeString oCmd.Parameters(i).Direction
            .endElement
            .startElement "Type"
            .writeString oCmd.Parameters(i).Type
            .endElement
            .startElement "Size"
            .writeString oCmd.Parameters(i).Size
            .endElement
            .startElement "Value"
            .writeString oCmd.Parameters(i).Value
            .endElement
        .endElement
    Next
    .endElement
End With

寫數(shù)據(jù)

將數(shù)據(jù)作為 Command 對(duì)象的參數(shù)傳遞是一種非常有效的數(shù)據(jù)傳遞方法。它還可以進(jìn)行擴(kuò)展,并提供了一些類型檢查功能。

以下示例中,客戶提交給 Web 服務(wù)的 XML 數(shù)據(jù)被轉(zhuǎn)換為 ADO Command 對(duì)象的參數(shù),它將被傳遞到現(xiàn)有代碼:

Dim Cmd As ADODB.Command
Dim Param As ADODB.Parameter
' pNode 是包含客戶提交的 XML 的 MSXML2.IXMLDOMNode 
' 實(shí)例化一個(gè) ADO Command 對(duì)象
Set Cmd = New ADODB.Command
With Cmd
    ' 應(yīng)用 CommandType 和 CommandText
    .CommandType = _
        CInt(pNode.selectSingleNode("CommandType").nodeTypedValue)
    .CommandText = pNode.selectSingleNode("CommandText").nodeTypedValue
    ' 填充 Parameters 集合
    Set nodeParent = pNode.selectSingleNode("Parameters")
    For i = 0 To nodeParent.childNodes.length - 1
        Set nodeParameter = nodeParent.childNodes(i)
        Set Param = New ADODB.Parameter
        With Param
            .Name = "@" + nodeParameter.nodeName
            .Direction = _
                nodeParameter.selectSingleNode("Direction").nodeTypedValue
            .Type = nodeParameter.selectSingleNode("Type").nodeTypedValue
            .Size = nodeParameter.selectSingleNode("Size").nodeTypedValue
            .Value = factory.getMapper(enXSDstring, _
                Nothing).Read(nodeParameter.selectSingleNode("Value"), _
                    bstrEncoding, encodingMode, lFlags)
        End With
    .Parameters.Append oParam
    Next
End With

ADO 2x Recordset 對(duì)象

ADO 2斷開連接的記錄集通常用于在多層應(yīng)用程序的各層之間傳遞數(shù)據(jù)。數(shù)據(jù)可以是單行、多行或分層次的行。

讀數(shù)據(jù)

本示例中,現(xiàn)有代碼返回一個(gè) ADO Recordset 對(duì)象,它包含的層次行數(shù)據(jù)將被轉(zhuǎn)換為 XML,然后再返回給客戶:

Dim Doc As MSXML2.DOMDocument
Set Doc = New MSXML2.DOMDocument
' 將記錄集數(shù)據(jù)寫入 XMLDOM 
rs.Save oDoc, adPersistXML
' 將 XML 傳遞到 SOAP Toolkit Serializer
SoapSerializer.writeXML Doc.xml

寫數(shù)據(jù)

以下示例中,使用表示層次行數(shù)據(jù)的 XML 填充 ADO Recordset 對(duì)象,該對(duì)象將被傳遞到現(xiàn)有代碼:

Dim rs As ADODB.Recordset
Dim Doc As MSXML2.DOMDocument
Set rs = New ADODB.Recordset
Set Doc = New MSXML2.DOMDocument
' 將 XML 載入 XMLDOMDocument   
Doc.loadXML pNode.xml
' 使用來自 XMLDOMDocument 的 XML 填充記錄集
rs.Open Doc

Stream 對(duì)象

流提供了一種在應(yīng)用程序的本地層之間傳遞數(shù)據(jù)的有效方法。它是從 Microsoft SQL Server?2000 中讀取 XML 的主要方法。

讀數(shù)據(jù)

以下示例中,現(xiàn)有代碼返回表示層次行數(shù)據(jù)的 XML 流,它將被轉(zhuǎn)換,然后返回給客戶:

Dim inStream As ADODB.Stream
' pvar 包含現(xiàn)有代碼返回的流對(duì)象    
Set inStream = pvar
' 將 XML 數(shù)據(jù)從流傳遞到 SOAP Serializer
SoapSerializer.writeString inStream.ReadText

XMLDOM 對(duì)象

XMLDOM 對(duì)象是一種在多層應(yīng)用程序的本地層之間傳遞數(shù)據(jù)的好方法。它提供了接口可擴(kuò)展性、類型檢查和架構(gòu)驗(yàn)證功能。

讀數(shù)據(jù)

以下示例中,現(xiàn)有代碼返回一個(gè) XMLDOMDocument 對(duì)象,該對(duì)象將被轉(zhuǎn)換,然后返回給客戶:

`pvar 包含 XMLDOMDocument
pSoapSerializer.writeXML pvar.xml

寫數(shù)據(jù)

以下示例中,使用表示層次行數(shù)據(jù)(由客戶提交)的 XML 填充 XMLDOM 對(duì)象,然后將該對(duì)象傳遞到現(xiàn)有代碼:

Set oDoc = New MSXML2.DOMDocument
' 將 IXMLDOMNode XML 載入 DOMDocument 對(duì)象
`pnode 包含 IXMLDOMNode 對(duì)象
oDoc.loadXML pNode.childNodes(0).xml

總結(jié)

本文及附帶的示例介紹了有關(guān)數(shù)據(jù)轉(zhuǎn)換的信息。通過數(shù)據(jù)轉(zhuǎn)換,可以使用 SOAP Toolkit 2.0 將現(xiàn)有代碼作為 Web 服務(wù)提供。本文介紹了一些常用的接口對(duì)象。

這些解決方案的性能各異,并且受所傳遞的數(shù)據(jù)大小影響。在本系列后面的文章中,我們將對(duì)這些實(shí)現(xiàn)方法進(jìn)行比較。

評(píng)估現(xiàn)有代碼是否適合作為 Web 服務(wù)時(shí),接口只不過是應(yīng)當(dāng)考慮的諸多因素之一。應(yīng)考慮的其它因素包括安全性(包括授權(quán)、身份驗(yàn)證和加密)、事務(wù)模型、狀態(tài)模型、返回錯(cuò)誤和結(jié)果的方式,以及代碼是同步還是異步執(zhí)行,等等。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多