一编写服务程序java
第一步:File----->New----->Other------>WebServices----->Soap Server Applicationweb
选择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.ide
第三步:实现第二步中所定义的接口和方法。先经过向导生成一个空的单元文件,而后定义自定义接口(IWebtest)的实现类。原代码以下:编码
unit Unit2;spa
interface
uses InvokeRegistry,Unit1;//引用自定义的接口单元
type
TWebTest=class(TInvokableClass,IWebTest)//定义实现类,此类必须继承自TInvokableClass,并实现自定义接口
protected
function gettext():widestring;stdcall;//申明在自定义接口中所定义的方法
end;
implementationorm
{ 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.xml
第四步:编译整个应用程序,即产生一个*.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;
以上转自,网络是一个简单的例子,有兴趣的能够和我讨论。以上的例子还用java客户调用经过。做者邮箱是coala@21cn.com
Server 端:
SoapDataModule中加入 ADOConnection一、ADODataSet一、DataSetProvider1;DataSetProvider1的DataSet设置为ADODataSet1;ADODataSet1的CommandText设置为空,Connection设置为ADOConnection1。
DataSetProvider1的DataRequest事件:procedure TDataMod.SoapDataModuleCreate(Sender: TObject);
var
DataPath: string;
const
SQL :string = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\programs\Delphi7\Demos\WebServices\SOAPDataModule\Data\Tree.mdb;Persist Security Info=False';
begin
DataPath := ExtractFilePath(Application.ExeName)+ '..\Data\';
XMLTransformProvider1.XMLDataFile := DataPath + 'XML_Document.xml';
XMLTransformProvider1.TransformRead.TransformationFile := DataPath + 'ToDp.xtr';
XMLTransformProvider1.TransformWrite.TransformationFile := DataPath + 'ToXml.xtr';
try
ADOConnection1.Connected :=false;
ADOConnection1.ConnectionString:= SQL;
ADOConnection1.Connected :=true;
except
//showmessage(A_ParentPath+'Data\InfoMat.mdb 调用失败');
end;
end;
Client端:
SoapConnection一、ClientDataSet1;ClientDataSet1的ConnectionBroker属性为SoapConnection1,ProviderName属性为DataSetProvider1
查询记录集: procedure TClientForm.Button1Click(Sender: TObject); var SQL:string; begin if not SoapConnection1.Connected then begin SoapConnection1.URL:=URLList.Text+'/soap/IDataMod'; SoapConnection1.Open; end; SQL := Edit1.text; with ClientDataSet1 do begin Data := DataRequest(SQL); end; end;