透視和調整你的企業和商務系統(Ⅳ: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.ms
soapinit("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