|
我们的WebService 做成了,调用也成功了 .net 调用 .net 的东西很容易,但是我个人很不喜欢微软。写WebService 有很多可以实现 java delphi ruby 等..客户端也是。根据实际情况,选择即可!但是在桌面客户端的话,我比较偏向与Delphi.桌面客户端谁也不愿意背着个.net freamwork 到处跑!接下来玩点有意思的,使用.net 的Web Service 并用Delphi 来实现Web Service 的调用!现在我想使用 Delphi 来调用WebService 又该如何了? Delphi 调用WEbService 的方法倒是简单,但是用delphi 调用 .net 返回的数据集又如何? 随我来,我来揭开谜底。
开启Delphi 新建一个VCL application,再添加一个WSDL importer
填写如 URL 还是和刚才 wsdl.exe 点击 Finish
finish 结束 在窗体上添加 如下控件TclientDataSet、THTTPRIO 、TXMLTransformProvider TdataSource 、TDBGrid
设置属性 DBGrid1 DataSource 指向DataSource1 DataSource1 DataSet 指向ClientDataSet1 ClientDataSet1 providername 指向XMLTransformProvider1 HTTPRIO1 Port 设置 ServiceSoap Service 设置Service WSDLLOcation 设置 代码为 uses Service; //使用刚才生成的接口 procedure TForm1.BitBtn1Click(Sender: TObject); var IntRes:Integer; StrRes:String; begin (HTTPRIO1 as ServiceSoap).GetDataSet('Select * From Customers') { //注释了,几个webService 的测试函数 IntRes:=(HTTPRIO1 as ServiceSoap).Add(1,2); StrRes:=(HTTPRIO1 as ServiceSoap).HelloWorld('Cool'); SHowMessage(IntToStr(IntRes)); ShowMessage(StrRes); } end; procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream); var XMLDoc: IXMLDocument; begin SOAPResponse.Position := 0; //读入soap 到memo1中 Memo1.Lines.LoadFromStream(SOAPResponse); SOAPResponse.Position := 0; end; 运行一下,获取解析出来XML数据
把Memo1 内容复制出来保存为XML 文件,这里保存为RawData.xml 文件,OK 使用Delphi 的XML Mapper 映射XML
选择好列以后,选择 File -> Save ->Transformation, 注意这里有个bug还是什么 Delphi 不知道SOAP 的名称空间 所以预览数据还是空的!我们一下手工修复一下, 我用的是Delphi 10 不知道Delphi 2009 如何?使用记事本打开刚才生成的ToDp.xtr 文件第一行位置 <SelectEach dest="DATAPACKET/ROWDATA/ROW" from="/soap:Envelope/soap:Body/...."> [修改为] <SelectEach dest="DATAPACKET/ROWDATA/ROW" from="/Envelope/soap:Body/...."> OK! 接下来,回到 Delphi TransformRead.TransformationFile D:/My Documents/Borland Studio Projects/ToDp.xtr 现在还要修改代码,直接从解析的 XML procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string; SOAPResponse: TStream); var XMLDoc: IXMLDocument; begin SOAPResponse.Position := 0; Memo1.Lines.LoadFromStream(SOAPResponse); ClientDataset1.Active := FALSE; SOAPResponse.Position := 0; XMLDoc := NewXMLDocument; XMLDoc.Encoding := 'GB2312'; SOAPResponse.Position := 0; XMLDoc.LoadFromStream(SOAPResponse); XMLTransformProvider1.TransformRead.SourceXmlDocument := XMLDoc.GetDOMDocument; ClientDataset1.Active := TRUE; end; 注意单元的引用读 XML 呵呵 ~
运行速度不错! |
[原创] 分布式系统框架搭建 PartThree-Delphi 露脸
最新推荐文章于 2023-03-09 10:51:45 发布
本文介绍如何使用Delphi调用.NET WebService,并详细解释了配置步骤与代码实现细节,包括客户端数据集的设置及XML数据的解析。






5176

被折叠的 条评论
为什么被折叠?



