zoukankan      html  css  js  c++  java
  • Delphi6开发Web Service程序

    本文介绍的是如何用Delphi6开发Web Service程序,并把服务程序放在IIS Web服务器上提供给各种客户程序调用。

    一编写服务程序

    第一步:File----->New----->Other------>WebServices----->Soap Server Application

    选择ISAPI/NSAPI Dynamic Link Library然后确定。生成一个框架。后面的大部分原代码都需要自己手工添加

    第二步:定义一个接口单元。先通过向导生成一个空的单元文件,然后在此单元中实现基本的接口(Iinvokable)和定义以后客户端程序可以调用的方法,原代码如下:

    unit unit1;
    interface
    uses InvokeRegistry;//基本的结构和方法的定义都在此单元中,必须引用
    type
    IWebTest=interface(Iinvokable)//自定义的一个结构,继承自Iinvokable
    ['{A436B0D2-D490-4C80-820A-355D979E8704}']//通过Ctrl+Shift+G生成的一个GUID
    function gettext():widestring;stdcall;//自定义的一个方法,也是以后客户可以调用的方法
    end;
    implementation

    initialization//初始化
    InvRegistry.RegisterInterface(Typeinfo(IWebTest));//通过此方法来注册接口
    end.

    第三步:实现第二步中所定义的接口和方法。先通过向导生成一个空的单元文件,然后定义自定义接口(IWebtest)的实现类。原代码如下:

    unit Unit2;

    interface
    uses InvokeRegistry,Unit1;//引用自定义的接口单元
    type
    TWebTest=class(TInvokableClass,IWebTest)//定义实现类,此类必须继承自TInvokableClass,并实现自定义接口
    protected
    function gettext():widestring;stdcall;//申明在自定义接口中所定义的方法
    end;
    implementation

    { Test }
    procedure createwebtest(out obj:tobject);//此过程为创建类实例,必须手工添加
    begin
    obj:=TWebTest.Create;//创建类实例
    end;
    function TWebTest.gettext: widestring;//实现自定义方法
    begin
    Result:='Success';
    end;
    initialization//初始化
    InvRegistry.RegisterInvokableClass(TWebTest,createwebtest);//注册自定义类
    end.

    第四步:编译整个应用程序,即产生一个*.dll的程序,把此程序拷贝到IIS的Cgi-bin目录下(或者其他可执行的目录,要根据自己的目录来选择),然后即可通过以下方式的链接访问到Wsdl:http://192.168.1.222/cgi-bin/*.dll/wsdl访问到以XML方式编码的Wsdl文件了,这就是客户端程序调用需要的文件。其中*.dll为你自己的应用程序的名字。192.168.1.222为你的Web服务器地址。Cgi-bin为你的Web服务器的可以执行Cgi程序的目录名称。



    二编写客户程序:

    第一步:新建一个Application。

    第二步:File----->New----->Other------>WebServices----->Soap Services Importer

    然后在Wsdl or Xml Schema Location中填入:http://192.168.1.222/cgi-bin/*.dll/wsdl/IWebTest,然后确定即生成了一个新的接口定义单元。

    第二步:在主form上放上一个按钮和一个Httprio组件(在WebServices页上),并引用第二个单元(即通过Soap Services Importer自动生成的单元)

    在Httprio的属性页上的WsdlLocation里面填上http://192.168.1.222/cgi-bin/*.dll/wsdl/IWebTest;然后在Httprio属性页上的Port和Service上选择上相应的数据即可。

    第三步:书写客户调用程序,原代码如下:

    procedure TForm1.Button1Click(Sender: TObject);
    var
    testobj:IWebTest;//定义对象
    begin
    testobj:=Httprio1 as IWebTest;//创建对象
    showmessage(testobj.gettext);//调用方法
    end;

    ------------------------------------------------------------------------------------------------------------------------------------------



    在开发WebService 时,客户端调用出现Received content of invalid Content-Type setting:text/html - SOAP expects "text/xml"服务类型为ISAPI解决方法:将服务器webservice .dpr 文件 ISAPIThreadPool,ISAPIApp,调换一下位置.开发环境为: Delphi7 + MS SQL2000+WINDOWS 2K PRO 
  • 相关阅读:
    php 内置的 webserver 研究。
    php 系列
    git 以及 github 使用系列
    中午和同事聊天,了解的一点网络方面的东西。
    javascript中0.01*2324=23.240000000000002 ?
    javascript的 replace() 方法的使用讲解
    PHP中的ORM
    javascript 函数 add(1)(2)(3)(4)实现无限极累加 —— 一步一步原理解析
    animate.css
    面向对象编程
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/2128661.html
Copyright © 2011-2022 走看看