在cbuilder中,其实调用soap倒是很简单,只是不知道能否和其他语言通用。说是可以跨语言,但是没有做过。
预备:
web services控件的说明如下:
● thttprio:通过http和soap数据包调用远程web services;
●
toptosoapdomconvert:将请求参数打包成soap,并且解析soap响应数据包;
●
thttpeqresp:通过wininet.dll传送http请求或接收http响应;
●
thttpsoapdispatcher:拦截http请求,并把请求分派给thttpsoapcppinvoker;
●
thttpsoapcppinvoker:根据请求调用正确的web services;
● twsdlhtmlpublish:自动产生描述web
servicse的服务信息以及wsdl内容。
下面做了一个例子检测一下能否调用对数据库的操作。
1.服务端:
在project立即建立一个soap服务端程序,加入datamodual,
加入adoconnection,如图:
在接口类中写一个接口方法:如下:
/*************************************************
操作数据库,返回对数据库的操作处理
*/
string ttest6impl::do1(string s)
{
if (dm1 == null)
{
dm1 = new
tdm1(null);
}
dm1->adoquery->close();
dm1->adoquery->sql->clear();
dm1->adoquery->sql->text = "select * from workno where workno ='"+ s +
"'";
dm1->adoquery->open();
if
(!dm1->adoquery->isempty())
{
return dm1->adoquery->fieldbyname("name")->asstring;
}
else
return
"no";
}
它将返回对数据库的业务逻辑处理。
继续,看能否将数据表发布出去,直接引入webdatamodual,
同样,加入adoconnection控件,如图:
放入表格控件。
对上编译后,将dll放到iis中,通过本地ie可以看到其webdatamodual已经发布出去。如图:
点击ie中的接口itest6的【wsdl】把生成的xml文件到文件,作为客户端导入的接口头文件。
2.客户端编写
a。创建一个应用程序,导入websoap中的接口,如图:
将在ie中刚拷贝的xml文件生成接口文件,
在客户端编写调用。在界面添一个edit,button控件,其代码
其中加入httprio1,其是通过http和soap数据包调用远程web
services;
其实接口文件中的getites6封装了httpprio调用的过程。
void __fastcall tform3::button1click(tobject
*sender)
{
// label1->caption =
getitest6()->do1(edit1->text);
_di_itest6
service;
httprio1->queryinterface(service); //查询接口
if
(!service)
return;
label1->caption = service->do1(edit1->text);
}
如何返回数据集,加入tsoapconnection,以及tdataclient控件,
设置相应的链接数据集以及接口属性。
如图:
挂好后,增加一个按钮:激活clientdataset控件
void __fastcall tform3::button3click(tobject
*sender)
{
clientdataset1->active = true;
}
编译上面的文件,生成客户端exe,启动该客户端,运行检查。
由于本人机子上安装的是sql
server,打开一个工号表,看输入工号
1234返回的是否姓名:运行结果返回姓名。
在第二页检查是否返回数据集,运行结果如图:
看来,把客户端程序以后可以通过80端口处理业务,
而不是直接连接到数据库上,对于配置来说是不是减少了
麻烦,而且,可以在客户端混用其他的语言,这样,一个小组
开发没有必要非cbuilder不可。
源码附:http://www.tomore.com/1/44173.html