透视和调整你的企业和商务系统(Ⅳ:WebService、dotNET)

透视和调整你的企业和商务系统( Ⅳ: WebService 、 dotNET )


小气的神 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... 输入 http://henrysvr/Authors/Authors.wsdl , 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

EchoCall SOAP

好了,剩下的又是 ADODB.Recordset 的问题,如果处理这个 COM 对象呢?之前我们已经用了一种方法, dotNET 作为 Client ,这次我换一种方式,生成一个 ASP.NET 方式的 WebService, 然后引用 bus_Authors 组件,对那些返回记录集的函数在这个 WebService 中做一个封装。比如:

 1<webmethod()> Public  Function  Version()  As  String 
 2
 3Dim  obj  As  bus_Authors.Authors 
 4
 5obj =  New  bus_Authors.Authors() 
 6
 7Version = obj.Version 
 8
 9End  Function 
10
11<webmethod()> Public  Function  GetAuthors()  As  DataSet 
12
13Dim  obj  As  bus_Authors.Authors 
14
15Dim  rst  As  ADODB.Recordset 
16
17Dim  myDataAdapter  As  OleDb.OleDbDataAdapter 
18
19Dim  retDataset  As  DataSet 
20
21obj =  New  bus_Authors.Authors() 
22
23rst =  New  ADODB.Recordset() 
24
25myDataAdapter =  New  OleDb.OleDbDataAdapter() 
26
27retDataset =  New  DataSet() 
28
29rst = obj.GetAuthors() 
30
31myDataAdapter.Fill(retDataset, rst, "GetAuthors") 
32
33GetAuthors = retDataset 
34
35End  Function 
36
37看的出来,就是简单的调用  Biz  组件,然后将  ADODB.Recordset  转换成  DataSet  。 
38
39有关引用  Bus_Authors  ,你可以在目前的这部机器上安装我们在第一篇  Export  出来的  Server  或  Proxy  都可以,我为了方便,直接使用了  Server  包。剩下来的就十分简单了,需要生成一个测试程序,这个就简单了,参照  Carl Franklin  的录像就可以了。算是也自己练习一次  haha  。 
40
41(  具体参见  http://www.csdn.net/develop/read_article.asp?id=10816  ) 
42
43下面是运行的代码和拷图: 
44
45Private  Sub  Page_Load(  ByVal  sender  As  System.Object,  ByVal  e  As  System.EventArgs)  Handles  MyBase  .Load 
46
47'Put user code to initialize the page here 
48
49Dim  rs  As  DataSet 
50
51Dim  obj  As  New  localhost.Authors() 
52
53rs = obj.GetAuthors() 
54
55DataGrid1.DataSource = rs 
56
57DataGrid1.DataBind() 
58
59End  Sub 
60
61![Client Aspx Call ](http://vsdotnet.51.net/jpg/ASPX.jpg)
62
63至于  VB  版本的客户端也是可以的,你可以在另外一部机器上用下面的代码进行测试: 
64
65Dim RetXML as Object 
66
67Dim SoapClient As MSSOAPLib.SoapClient 
68
69Set SoapClient = New MSSOAPLib.SoapClient 
70
71Call SoapClient.mssoapinit("http://Dereksvr/Authors/Authors.asmx?WSDL") 
72
73Set  RetXML  = SoapClient.GetAuthors() 
74
75如果成功返回的应当是一个  IXMLDOMNodeList  里面包括整个的  Dataset  结构和  23  条数据,至于具体的显示这个结果集的  VB  程序就不再说了,以后也许会专门有文章论述如何将  dotNET  的  DataSet  转化成  VB  可以识别的问题,比如会有  FillListView( lstv As Control , obj as Object)  之类的函数将这个  XML  结构填充到  VB6 ListView  或  Grid  控件中  ,  这里我就不详细说了。具体的你还可以在其他机器上使用  http://Dereksvr/Authors/Authors.asmx  然后选取  GetAuthors  然后点击调用获得结果,也可以直接点:  http://Dereksvr/Authors/Authors.asmx/GetAuthors  ?  你在  IE  窗口上可以明显的看到这个返回结果的  XML  文档(从中你可以看到  DataSet  最原始的构造  haha  )。 
76
77掌握不同返回类型分别处理的原则,无论是  MS SOAP Toolkit  还是  ASP.NET WebService  都是可以被我们所用。看起来使用  dotNET  会简单和省力许多。我想随着  dotNET  技术的推进,越来越多的人会考虑用  dotNET  技术实现一些新的商务或企业应用系统,至少我会这样。也许这些例子是想说明从现在的  Windows DNA  构架切换到新的  dotNET  体系结构下,是可行也是可以被你控制的。并不是像一些人以为的那样,认为只用  VS.NET  重新编译一遍原来的应用就  OK  ,也不能像另外一些人以为的那样,认为  dotNET  根本是市场的策略,而且真正实施起来很麻烦很困难,还要等个  3  -  5  年。 
78
79* * *
80
81特别:  以上文字和图片涉及其他人的隐私和个人权利,如非被授权或经本人同意,任何网站或期刊请不要刊登、转载、改编、转贴或已其他形式进行传播。以上所有文字和图片只用于内部交流,不作任何新闻发表和商业用途。</webmethod()></webmethod()>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus