透視和調整你的企業和商務系統(Ⅳ:WebService、dotNET)

發表于:2007-06-30來源:作者:點擊數: 標簽:
小氣的神 2001-10-15 到上一篇為止,我們已經完成了在第一篇(Analyzing、Requirement)所說的三個過程中的第二步了,這一篇開始我們可以用dotNET的WebService方式來重新考慮以前的Authors WebService,技術上我傾向于MS的建議,那就是在實現和設計Web Service
小氣的神 2001-10-15

    到上一篇為止,我們已經完成了在第一篇(Analyzing、Requirement)所說的三個過程中的第二步了,這一篇開始我們可以用dotNET的WebService方式來重新考慮以前的Authors WebService,技術上我傾向于MS的建議,那就是在實現和設計Web Services時將ASP.NET的WebService作為首選。所以這一篇我們將主要考察ASP.NET的WebService.

    這要從第二篇的分析開始,原來當我用SOAP Toolkit生成了WebService后,我就在Dereksvr機器上用VS.NET的Add Web Reference...輸入,VS.NET也是可以發現這個WebService,但是由于ADODB.Recordset的問題,它無法生成Proxy類,當時我以為SOAP Toolkit生成的WSDL并不完全兼容很快放棄了繼續向下實驗了。幾天之后我又做了另外一種嘗試:我用SOAP Toolkit重新生成了WebService的WSDL文件,這次我沒有把返回ADODB.Recordset的函數放到里面,也就是全部都是在第二篇說的標志類型,然后我又在VS.NET中重復了上述的步驟,這一次OK了,VS.NET成功的生成了Proxy類,我生成了一個小例子測試,結果是成功的。那么結論是:對于第二類返回特殊類型的(也就是第二篇中用CTM的類型)我們要另外處理,對于第一種類型的我們只要用MS SOAP Toolkit生成WSDL文件,然后在IIS中設置好,就可以成為一個WebService,在消費這種WebService上我們不用特殊處理。不僅VS.NET可以直接使用,其他支持WebService規范的也是可以使用的(只能說估計。Java?Delphi?抱歉我沒有試過)下面是我測試成功的例子的拷圖,感覺還不錯,連中文也不用什么特殊處理。
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim obj As henrysvr.Authors
        Dim retString As String

        Dim SendStr As String
        SendStr = echoTxt.Text

        obj = New henrysvr.Authors()
        retString = obj.Echo(SendStr)
        MessageBox.Show(retString)

    End Sub





好了,剩下的又是ADODB.Recordset的問題,如果處理這個COM對象呢?之前我們已經用了一種方法,dotNET作為Client,這次我換一種方式,生成一個ASP.NET方式的WebService,然后引用bus_Authors組件,對那些返回記錄集的函數在這個WebService中做一個封裝。比如:
    <WebMethod()> Public Function Version() As String
        Dim obj As bus_Authors.Authors
        obj = New bus_Authors.Authors()
        Version = obj.Version
    End Function

    <WebMethod()> Public Function GetAuthors() As DataSet

        Dim obj As bus_Authors.Authors
        Dim rst As ADODB.Recordset

        Dim myDataAdapter As OleDb.OleDbDataAdapter
        Dim retDataset As DataSet

        obj = New bus_Authors.Authors()
        rst = New ADODB.Recordset()

        myDataAdapter = New OleDb.OleDbDataAdapter()
        retDataset = New DataSet()

        rst = obj.GetAuthors()
        myDataAdapter.Fill(retDataset, rst, "GetAuthors")
        GetAuthors = retDataset
    End Function
看的出來,就是簡單的調用Biz組件,然后將ADODB.Recordset轉換成DataSet。
有關引用Bus_Authors,你可以在目前的這部機器上安裝我們在第一篇Export出來的Server或Proxy都可以,我為了方便,直接使用了Server包。剩下來的就十分簡單了,需要生成一個測試程序,這個就簡單了,參照Carl Franklin的錄像就可以了。算是也自己練習一次haha。
(具體參見 )

下面是運行的代碼和拷圖:
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        @#Put user code to initialize the page here
        Dim rs As DataSet
        Dim obj As New localhost.Authors()

        rs = obj.GetAuthors()
        DataGrid1.DataSource = rs
        DataGrid1.DataBind()
    End Sub






    至于VB版本的客戶端也是可以的,你可以在另外一部機器上用下面的代碼進行測試:
    Dim RetXML as Object
Dim SoapClient As MSSOAPLib.SoapClient
    Set SoapClient = New MSSOAPLib.SoapClient

    Call SoapClient.mssoapinit("http://Dereksvr/Authors/Authors.asmx?WSDL")

Set RetXML = SoapClient.GetAuthors()
如果成功返回的應當是一個IXMLDOMNodeList 里面包括整個的Dataset結構和23條數據,至于具體的顯示這個結果集的VB程序就不再說了,以后也許會專門有文章論述如何將dotNET的DataSet轉化成VB可以識別的問題,比如會有FillListView( lstv As Control , obj as Object)之類的函數將這個XML結構填充到VB6 ListView或Grid控件中,這里我就不詳細說了。具體的你還可以在其他機器上使用 然后選取GetAuthors然后點擊調用獲得結果,也可以直接點:? 你在IE窗口上可以明顯的看到這個返回結果的XML文檔(從中你可以看到DataSet最原始的構造haha)。

掌握不同返回類型分別處理的原則,無論是MS SOAP Toolkit 還是ASP.NET WebService都是可以被我們所用??雌饋硎褂胐otNET會簡單和省力許多。我想隨著dotNET技術的推進,越來越多的人會考慮用dotNET技術實現一些新的商務或企業應用系統,至少我會這樣。也許這些例子是想說明從現在的Windows DNA構架切換到新的dotNET體系結構下,是可行也是可以被你控制的。并不是像一些人以為的那樣,認為只用VS.NET重新編譯一遍原來的應用就OK,也不能像另外一些人以為的那樣,認為dotNET根本是市場的策略,而且真正實施起來很麻煩很困難,還要等個3-5年。 

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97