高分 请教关于 webservice 开发 ( 积分: 300 )

  • 主题发起人 主题发起人 唐佐平
  • 开始时间 开始时间

唐佐平

Unregistered / Unconfirmed
GUEST, unregistred user!
最近做一个系统,与其他业务系统有接口,是webservice接口,
我对这个不熟,对方提供一个“SearchService.wsdl”文件,
调用接口为:public string SearchApproveState(string sllsh, string

password)
请问webservice怎么调用,请各位给我一个讲解,
DEMO或说明可发到我邮箱:Tangzuoping@163.com
注明大富翁的名称,我好给分,谢谢。
 
你先定义这样一个单元:
unit GetConnStr;//单元的名称你定

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;

type

Service1Soap = interface(IInvokable)
['{CFE467D4-A39E-2BD2-5836-7685A9E27F8D}']
function getConn(const key: WideString): WideString; stdcall; //你要改的就是这些函数,WebService中有什么就写什么。
end;

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


implementation

function GetService1Soap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): Service1Soap;
const
defWSDL = 'http://localhost/mta/MyService.asmx?wsdl';//这个要不要无所谓,反正可以传入地址
defURL = 'http://localhost/mta/MyService.asmx';
defSvc = 'Service1';
defPrt = 'Service1Soap';
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 Service1Soap);
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(Service1Soap), 'http://tempuri.org/', 'utf-8');
InvRegistry.RegisterDefaultSOAPAction(TypeInfo(Service1Soap), 'http://tempuri.org/%operationName%');
InvRegistry.RegisterInvokeOptions(TypeInfo(Service1Soap), ioDocument);

end.
//注 这个单元可以由Delphi 7.0自己生成。
 
然后,在你的引用单元中定义一个对象:
use GetConnStr, SOAPHTTPClient

var
HTTPRIO1: THTTPRIO;
//在这里可以调用的的WebSerivce函数了
function TDM.GetLinkStr(Site:string;Key:string=''):String;
var
sp:Service1Soap;
s:string;
begin
s:='http://localhost/MyService.asmx?wsdl' ;//这个地址可以根据需要指定
try
sp:=GetService1Soap(false,s,HTTPRIO1);
if sp<>nil then
result:=sp.getConn(Key);//换成你定义的函数
except on e:exception do
begin
result:='';
showmessage(e.Message);
end;
end;
end;
以上我我在7.0上做的一个例子,目的是通过WebService从服务器获取数据库连接串。
 
学习一下
帮你顶
 
THTTPRIO
是正解,通过它调用webserver函数就和调用本地函数一样,还是挺方便的
www.chinadacs.cn
www.chinadacs.com.cn
 
后退
顶部