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


     

  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/308765.html
Copyright © 2011-2022 走看看