`

delphi7开发webservice部属在apache服务器中

阅读更多
用Delphi7开发Web Service程序,并把服务程序放在apache Web服务器上提供给各种客户程序调用。


第一步 编写服务程序



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

选择CGI Stand-alone executable然后确定,然后输入接口名字。

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

接口代码
{ Invokable interface IMyWeb }

unit MyWebIntf;

interface

uses InvokeRegistry, Types, XSBuiltIns;;//基本的结构和方法的定义都在此单元中,必须引

type

  { Invokable interfaces must derive from IInvokable }
  IMyWeb = interface(IInvokable)   //自定义的一个结构,继承自Iinvokable
  ['{E3070F4D-AEBF-47D6-963B-ADFFC4E7C7A1}']  //通过Ctrl+Shift+G生成的一个GUID


    { Methods of Invokable interface must not use the default }
    { calling convention; stdcall is recommended }
  function gettext():widestring;stdcall;//自定义的一个方法,也是以后客户可以调用的方
  end;

implementation

initialization
  { Invokable interfaces must be registered }
  InvRegistry.RegisterInterface(TypeInfo(IMyWeb));//通过此方法来注册接

end.


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

实现接口代码

{ Invokable implementation File for TMyWeb which implements IMyWeb }

unit MyWebImpl;

interface

uses InvokeRegistry, Types, XSBuiltIns, MyWebIntf,Unit1;//引用自定义的接口单元


type

  { TMyWeb }
  TMyWeb = class(TInvokableClass, IMyWeb)//定义实现类,此类必须继承自TInvokableClass,并实现自定义接

  public
    function gettext():widestring;stdcall;//申明在自定义接口中所定义的方法
  end;

implementation
function TMyWeb.gettext: widestring;//实现自定义方法
begin
Result:='Success';
end;

initialization
  { Invokable classes must be registered }
  InvRegistry.RegisterInvokableClass(TMyWeb);

end.

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



第二步 编写客户程序:

第一步:新建一个Application。

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

然后在Wsdl or Xml Schema Location中填入:.exe/wsdl/IMyWeb,然后确定即生成了一个新的接口定义单元。
生成的代码

// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : http://127.0.0.1:8090/cgi-bin/Project2.exe/wsdl/IMyWeb
// Encoding : utf-8
// Version  : 1.0
// (2011-7-22 16:14:10 - 1.33.2.5)
// ************************************************************************ //

unit IMyWeb1;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Borland types; however, they could also 
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:string          - "http://www.w3.org/2001/XMLSchema"


  // ************************************************************************ //
  // Namespace : urn:MyWebIntf-IMyWeb
  // soapAction: urn:MyWebIntf-IMyWeb#gettext
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : rpc
  // binding   : IMyWebbinding
  // service   : IMyWebservice
  // port      : IMyWebPort
  // URL       : http://127.0.0.1:8090/cgi-bin/Project2.exe/soap/IMyWeb
  // ************************************************************************ //
  IMyWeb = interface(IInvokable)
  ['{85474E46-8BF2-FC4E-8A91-6FC82BB6EBF1}']
    function  gettext: WideString; stdcall;
  end;

function GetIMyWeb(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IMyWeb;


implementation

function GetIMyWeb(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IMyWeb;
const
  defWSDL = 'http://127.0.0.1:8090/cgi-bin/Project2.exe/wsdl/IMyWeb';
  defURL  = 'http://127.0.0.1:8090/cgi-bin/Project2.exe/soap/IMyWeb';
  defSvc  = 'IMyWebservice';
  defPrt  = 'IMyWebPort';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as IMyWeb);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


initialization
  InvRegistry.RegisterInterface(TypeInfo(IMyWeb), 'urn:MyWebIntf-IMyWeb', 'utf-8');
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IMyWeb), 'urn:MyWebIntf-IMyWeb#gettext');

end. 

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



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

unit MyWebImpl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,IMyWeb1, StdCtrls;
    //IMyWeb1   为引入自动生成的webservice服务器接口
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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


end.


最后运行程序,点击Button,会弹出success的对话框,证明测试成功。
本人是初学delphi,很多方面不是很懂,通过浏览和总结网络中的例子,自己测试通过。因为网上好多例子不能运行,(可能是自己有些地方不懂吧)所以自己把测试通过的项目发布到博客中。
源码下载页面:http://download.csdn.net/source/3462185
分享到:
评论

相关推荐

    Delphi7的WebService与数据库

    Delphi7 是一款功能强大且广泛应用的开发工具,在开发 WebService 时,经常需要与数据库进行交互,以获取或存储数据。在本文中,我们将详细介绍 Delphi7 下开发WebService 如何使用数据库进行交互。 Server 端 ...

    Delphi开发的webservice实例

    在Delphi中创建Web服务,通常涉及以下步骤: - 设计服务接口:定义服务公开的方法和数据类型。 - 实现服务逻辑:编写处理请求和返回响应的代码。 - 配置ISAPI:设置ISAPI项目,使其能够作为HTTP服务的插件运行。...

    delphi开发webservice经验总结.pdf

    delphi开发webservice经验总结

    delphi7的webservice开发

    delphi 7 开发webservice步骤,仅供参考,做备份用,为什么要写50个字

    解决Delphi7因数据执行保护导致的Webservice无法访问错误

    在使用Delphi 7开发应用程序时,有时会遇到一个常见的问题,即在尝试调用Web Service时,程序因为Windows的数据执行保护(Data Execution Prevention, DEP)机制而失败。DEP是Windows操作系统为了提高系统安全性而...

    Delphi调用C#的Webservice返回Dataset

    - 使用Visual Studio的调试工具测试C# Web服务,Delphi中则可以使用断点和日志记录来调试客户端代码。 通过以上步骤,Delphi客户端能够成功地调用C#开发的Web服务,获取并处理返回的DataSet数据,实现跨平台的数据...

    ASP如何调用Delphi开发WebService服务测试实例

    在Delphi中开发WebService,开发者可以使用 Indy 或 SOAP Toolkit 等库来创建服务。这些库提供了用于构建WSDL文件和实现SOAP消息处理的工具。在创建完服务后,服务端会暴露一个URL,客户端可以通过这个URL与服务进行...

    delphi开发的webservice实例

    Delphi是一种强大的面向对象的编程环境,尤其在开发桌面应用程序方面有着广泛的应用。在这个实例中,我们关注的是使用Delphi 2007创建的Web Service。Web Service是一种基于网络的、可互操作的软件应用,它允许不同...

    delphi开发webservice经验总结

    用delphi调用dotnet开发的webservice经验总结,包含汉字乱码,soapheader安全验证的问题。

    Delphi7调用Java AXIS写的WebService

    因目前公司客户端采用delphi7开发,与服务器交换数据用的webservice也用delphi开发 本人是做java开发,所以想研究一下怎么用java开发webservice供delphi7调用 javaserver 是WebService 服务端,采用AXIS 1.4 为...

    delphi自主处理webservice返回的结果集

    用delphi自带的XML Mapper,当结果集太大时速度非常慢,而且delphi7的Mapper有bug,于是自己写了一个pas文件来接收和处理xml结果集,希望能对大家有用。基本的处理方法都有了,速度比Mapper快了几十倍。

    个人用DELPHI写的WEBSERVICE

    在本实例中,个人开发者使用了DELPHI这一强大的Object Pascal编程环境来创建了一个简单的WEBSERVICE,这展示了DELPHI在开发Web服务方面的灵活性和实用性。 1. **DELPHI简介** DELPHI是Embarcadero Technologies...

    用Delphi-实现WebService

    在软件开发领域,使用 Delphi 开发工具构建 WebService 是一种常见的需求。本文将详细阐述如何利用 Delphi 来实现 WebService,包括服务端与客户端的开发流程。 #### 一、编写服务程序 首先,我们需要创建一个 ...

    Delphi调用WebService的实例(非常经典)[参考].pdf

    在 Delphi 中调用 WebService 是一种非常经典的实例。下面我们将详细介绍 Delphi 调用 WebService 的相关知识点。 首先, Delphi 调用 WebService 需要了解基本概念。WebService 是一种基于 XML 的远程过程调用...

    Delphi开发和调用的webservice

    在Delphi中,可以通过`File` -> `New` -> `Other` -> `Web Service` -> `WSDL Importer`来导入WSDL文件。确保在URL末尾加上`?wsdl`,因为这是指示服务器返回WSDL文档的约定。 2. **设置THTTPRIO控件**: - ...

    delphi+C#webservice上传文件

    2. **Delphi中的Webservice调用** Delphi支持通过TWebMethod和THTTPRIO组件来调用Webservice。首先,需要添加TWebMethod组件到表单,然后配置其属性,如URL指向Webservice的地址,Operation属性设置为Webservice的...

    delphi调用Java webservice实例

    在Delphi中调用Java WebService主要依赖于 Indy 或 SOAP Toolkit 等组件库,这些库提供了生成客户端代理类的能力,使得Delphi代码可以直接调用WebService的方法。首先,你需要获取WebService的WSDL文件,它是服务...

    delphi开发webservices 接口实例

    在这个“delphi开发webservices接口实例”中,我们将深入探讨如何使用Delphi来创建和消费WebServices。 首先,我们要理解WebServices的基本概念。WebServices是一种基于标准(如SOAP、WSDL和UDDI)的应用程序接口,...

Global site tag (gtag.js) - Google Analytics