我在delphi7下调用微软的Web Services的心得.(可以返回数据集)

参考 燕八哥 MSN:cowbird2002@hotmail.com文章 : http://www2.cnblogs.com/cowbird/archive/2004/06/19/17129.html
操作步骤如下:
1、在VS.2003下编写WebServices,代码如下:
 1          [WebMethod]
 2           public   string  HelloWorld()
 3          {
 4               return   " Hello World " ;
 5          }
 6 
 7          [WebMethod]
 8           public  DataSet GetBook()
 9          {
10              sqlDataAdapter1.Fill(dsBook);
11               return  dsBook;
12          }
{用C#开发web services的时候,如果你这样写  sqlDataAdapter1.Fill(ds,'tablename');}那么你是看不到上面橙色筐中的字段的。千万不要表明数据集中表名。你这样写就可以了,sqlDataAdapter1.Fill(ds);就能显示字段了!

2、新建一个Delphi7项目,分别加入TButton,THTTPRIO,TXMLTransformProvider,TClientDataSet,TDataSource,TDBGridDelphi新建项目

3、在Delphi7中导入WebService
首选,选择File/New/Other/选择WebService/选择WSDL IMPORTER
WSDLImporter.GIF
4、这样在Unit1单元中引用WSDL单元,并在Button1的OnClick中写入代码如下:
 1  procedure TForm1.Button1Click(Sender: TObject);
 2  var
 3    test:Service1Soap; // 这个就是WSDL下的类接口对象
 4    msg:widestring;
 5  begin
 6     // HTTPRIO1 其实就是所谓的代理类,它负责进行数据传输发送Request和接受Response的
 7    test: = HTTPRIO1  as  Service1Soap;
 8 
 9    msg: = test.HelloWorld; // 这就是调用web服务所暴露给我们的web服务方法WebMethod
10    showmessage(msg);
11    test.GetBook;
12  end;
13 

设置HTTPRIO1的属性
WSDLLocation为http://localhost/WebService1/Service1.asmx?WSDL
Port为Service1Soap
Service为Service1
HttpRio.GIF
同时在AfterExecute事件写入以下代码

 1  procedure TForm1.HTTPRIO1AfterExecute( const  MethodName: String;
 2    SOAPResponse: TStream);
 3  var
 4    XMLDoc: IXMLDocument;
 5  begin
 6    SOAPResponse.Position : =   0 ;
 7    ClientDataset1.Active : =  FALSE;
 8    SOAPResponse.Position : =   0 ;
 9    XMLDoc : =  NewXMLDocument;
10    XMLDoc.Encoding : =   ' SUTF8 ' // 应该是'SUTF8'并需要引用XMLIntf,XMLDoc两个单元
11    SOAPResponse.Position : =   0 ;
12    XMLDoc.LoadFromStream(SOAPResponse);
13    XMLDoc.SaveToFile( ' c:\abc.xml ' );  // 可用这个文件做格式
14    XMLTransformProvider1.TransformRead.SourceXmlDocument : =  XMLDoc.GetDOMDocument;
15    ClientDataset1.Active : =  TRUE;
16  end;
17 


5、运行程序,产生C:\abc.xml文件,打开Toole/XMLMapper;打开abc.xml;选中'Sys_books',按右键,选择Select All Children,再选择Create Datapacket from XML(或按Ctrl+D),再点击Create and Test Transformation(Ctrl+T)按钮,最后右建中间框,选择Save Transformation(Ctrl+S),保存为C:\ToDp.xtr
XMLMappingTool.GIF
打开C:\ToDp.xtr文件
将<SelectEach dest="DATAPACKET\ROWDATA\ROW" from="\soap:Envelope\soap:Body\GetBookResponse\GetBookResult\diffgr:diffgram\NewDataSet\Sys_books">
改为<SelectEach dest="DATAPACKET\ROWDATA\ROW" from="\Envelope\Body\GetBookResponse\GetBookResult\diffgram\NewDataSet\Sys_books">
{from后面只要是单词后面有冒号的,该单词和冒号都要去掉,delphi7才能显示数据}

6、为XMLTransformProvider1属性TransformRead\TransformationFile指定文件C:\ToDp.xtr
TransormationReadFile.GIF

delphi7调用代码:/Files/ZhouXiHong/D_Client.rar


 

转载于:https://www.cnblogs.com/ZhouXiHong/archive/2005/12/31/308765.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值