用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 如何使用数据库进行交互。 Server 端 ...
在Delphi中创建Web服务,通常涉及以下步骤: - 设计服务接口:定义服务公开的方法和数据类型。 - 实现服务逻辑:编写处理请求和返回响应的代码。 - 配置ISAPI:设置ISAPI项目,使其能够作为HTTP服务的插件运行。...
delphi开发webservice经验总结
delphi 7 开发webservice步骤,仅供参考,做备份用,为什么要写50个字
在使用Delphi 7开发应用程序时,有时会遇到一个常见的问题,即在尝试调用Web Service时,程序因为Windows的数据执行保护(Data Execution Prevention, DEP)机制而失败。DEP是Windows操作系统为了提高系统安全性而...
- 使用Visual Studio的调试工具测试C# Web服务,Delphi中则可以使用断点和日志记录来调试客户端代码。 通过以上步骤,Delphi客户端能够成功地调用C#开发的Web服务,获取并处理返回的DataSet数据,实现跨平台的数据...
在Delphi中开发WebService,开发者可以使用 Indy 或 SOAP Toolkit 等库来创建服务。这些库提供了用于构建WSDL文件和实现SOAP消息处理的工具。在创建完服务后,服务端会暴露一个URL,客户端可以通过这个URL与服务进行...
Delphi是一种强大的面向对象的编程环境,尤其在开发桌面应用程序方面有着广泛的应用。在这个实例中,我们关注的是使用Delphi 2007创建的Web Service。Web Service是一种基于网络的、可互操作的软件应用,它允许不同...
用delphi调用dotnet开发的webservice经验总结,包含汉字乱码,soapheader安全验证的问题。
因目前公司客户端采用delphi7开发,与服务器交换数据用的webservice也用delphi开发 本人是做java开发,所以想研究一下怎么用java开发webservice供delphi7调用 javaserver 是WebService 服务端,采用AXIS 1.4 为...
用delphi自带的XML Mapper,当结果集太大时速度非常慢,而且delphi7的Mapper有bug,于是自己写了一个pas文件来接收和处理xml结果集,希望能对大家有用。基本的处理方法都有了,速度比Mapper快了几十倍。
在本实例中,个人开发者使用了DELPHI这一强大的Object Pascal编程环境来创建了一个简单的WEBSERVICE,这展示了DELPHI在开发Web服务方面的灵活性和实用性。 1. **DELPHI简介** DELPHI是Embarcadero Technologies...
在软件开发领域,使用 Delphi 开发工具构建 WebService 是一种常见的需求。本文将详细阐述如何利用 Delphi 来实现 WebService,包括服务端与客户端的开发流程。 #### 一、编写服务程序 首先,我们需要创建一个 ...
在 Delphi 中调用 WebService 是一种非常经典的实例。下面我们将详细介绍 Delphi 调用 WebService 的相关知识点。 首先, Delphi 调用 WebService 需要了解基本概念。WebService 是一种基于 XML 的远程过程调用...
在Delphi中,可以通过`File` -> `New` -> `Other` -> `Web Service` -> `WSDL Importer`来导入WSDL文件。确保在URL末尾加上`?wsdl`,因为这是指示服务器返回WSDL文档的约定。 2. **设置THTTPRIO控件**: - ...
2. **Delphi中的Webservice调用** Delphi支持通过TWebMethod和THTTPRIO组件来调用Webservice。首先,需要添加TWebMethod组件到表单,然后配置其属性,如URL指向Webservice的地址,Operation属性设置为Webservice的...
在Delphi中调用Java WebService主要依赖于 Indy 或 SOAP Toolkit 等组件库,这些库提供了生成客户端代理类的能力,使得Delphi代码可以直接调用WebService的方法。首先,你需要获取WebService的WSDL文件,它是服务...
在这个“delphi开发webservices接口实例”中,我们将深入探讨如何使用Delphi来创建和消费WebServices。 首先,我们要理解WebServices的基本概念。WebServices是一种基于标准(如SOAP、WSDL和UDDI)的应用程序接口,...