我们的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 发布