zoukankan      html  css  js  c++  java
  • 我在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

    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

    同时在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

    打开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


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


     

  • 相关阅读:
    World Wind Java开发之一(转)
    Excel如何显示隐藏列?
    Oracle开发›如何取出每个分组的第一条记
    如何解决EXCEL中的科学计数法
    使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10
    POI读取单元格信息及单元格公式
    java中判断字符串是否为数字的方法的几种方法
    阿里云OSS的 存储包、下行流量包、回流流量包 三者有啥关系
    vue+datatable+vue-resource动态获取jsonp数据2
    vue+datatable+vue-resource动态获取jsonp数据
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/308765.html
Copyright © 2011-2022 走看看