|
小气的神 2001-10-13
客户端的测试,主要是使用两个VB程序来测试一下,实际应用中可以是多种形式的VC、ASP或Script等方式的,只要和支持COM接口的都可以,但是真正发行你的客户端的时候,你需要附加MS SOAP Toolkit的分发库和CTM组件。也许正是这个原因,在做完这个测试之后,我又考虑用ASP.NET 方式的WebService实现,这样客户端才能够更加轻巧。
如果你熟悉VB和COM,VB版的测试很简单。最麻烦的就是IIS的配置,以及WSDL和WSML的语法是否正确,往往这是最费时间的。建议你多产生几次WSDL和WSML文件,从最简单的开始,先不要调试ADODB.Recordset的,等基本和简单的调试成功,然后再调试ADODB.Recordset类型的。WebService的一个好处就是比以前更安全一些。
先是VB版本,而且在本机进行测试:
Private Sub cmdVersion_Click()
Dim retStr As String
Dim SoapClient As MSSOAPLib.SoapClient
Set SoapClient = New MSSOAPLib.SoapClient
Call SoapClient.mssoapinit(strWSDLUrl, "", "", strWSMLUrl)
retStr = SoapClient.Version()
MsgBox retStr
Set SoapClient = Nothing
End Sub
Private Sub cmdSOAP_Click()
On Error GoTo ErrHandle
Dim result As ADODB.Recordset
Dim strHeaders As String
Dim SoapClient As MSSOAPLib.SoapClient
Set SoapClient = New MSSOAPLib.SoapClient
strHeaders = "Au_ID/姓名/Name/Phone/地址/City/State/Zip/Contract"
Call SoapClient.mssoapinit(wsdlUrl, "", "", wsmlUrl)
Set result = SoapClient.GetAuthors()
LvwHeadName lstAuthors, strHeaders
ADOFillLvw result, lstAuthors
MsgBox "共得到 " & result.RecordCount & " 条记录 "
ErrExit:
Set SoapClient = Nothing
Exit Sub
ErrHandle:
MsgBox SoapClient.detail
Resume ErrExit
End Sub
运行结果如下图:

接着开始到另外一部机器Dereksvr上去生成一个dotNET的WinForm来测试一下。原理上是一致的,不同的是dotNET方式下似乎更麻烦一些(haha),不过整个dotNET的互操作性可以说是一流的,唯一让人感到担忧的是程序执行的性能问题。首先还有一些工作要做:
1. 在Dereksvr上安装 Microsoft SOAP Toolkit 2.0 SP的分发库(因为要应用MSSOAPLib库)
2. 安装和注册CTM , Regsvr32 AdoRstTypeMapper.dll
3. 检查WSDL文件的最后一句如果是localhost请把它改成你的机器名或IP。
如果原来是:
<service name='Authors' >
<port name='AuthorsSoapPort' binding='wsdlns:AuthorsSoapBinding' >
<soap:address location='http://localhost/Authors/Authors.WSDL' />
</port>
</service>
修改成:
<service name='Authors' >
<port name='AuthorsSoapPort' binding='wsdlns:AuthorsSoapBinding' >
<soap:address location='http:// henrysvr/Authors/Authors.WSDL' />
</port>
</service>
这主要是如果其他机器调用这个WebService,那么设置成localhost会在调用机的本地找这个Service,那么一定会出错的。
在VS.NET中建立一个WinForm的Project,然后选取,这样VS.NET会自动生成一个包装的代理类,Version的可以象下面这样调用:
using System.Reflection ;
private void btnVersion_Click(object sender, System.EventArgs e)
{
//String retStr ;
String strWSDLUrl ;
String strWSMLUrl ;
MSSOAPLib.SoapClient SoapClient ;
SoapClient = new MSSOAPLib.SoapClient() ;
strWSDLUrl = wsdlUrl;
strWSMLUrl = wsmlUrl;
[1] [2] 下一页
|