Delphi实现WebService带身份认证的数据传输

来源:互联网 发布:泉州广电网络营业厅 编辑:程序博客网 时间:2024/04/19 06:21
在WebService中,用户身份认证信息可以在客户端通过soap头(soapheader)进行传送。在WebService服务端的编写中,需要对soap头进行处理,这个处理过程就是提取SoapHeader中的用户认证信息进行验证。下面就来看看在Delphi中这个身份认证是如何实现的:

   通过WSDLimport引入WEBSERVICE,DELPHI会自动产生自定义的Header类,这个类继承于TSoapHeader。

ShuSoapHeader = class(TSOAPHeader)
  private
    FNMsg:WideString;
    FUserID:WideString;
    FPassWord:WideString;
  published
    propertyNMsg: WideString read FNMsg write FNMsg;
    propertyUserID: WideString read FUserID write FUserID;
    propertyPassWord: WideString read FPassWord write FPassWord;
  end;

同时自动产生引用接口:

 InvRegistry.RegisterInterface(TypeInfo(SLoginServicesSoap),'http://passport.shu.edu.cn/', 'utf-8');
 InvRegistry.RegisterDefaultSOAPAction(TypeInfo(SLoginServicesSoap),'http://passport.shu.edu.cn/%operationName%');
 InvRegistry.RegisterHeaderClass(TypeInfo(SLoginServicesSoap),ShuSoapHeader, 'ShuSoapHeader', '');
  RemClassRegistry.RegisterXSClass(ShuSoapHeader,'http://passport.shu.edu.cn/', 'ShuSoapHeader');
 RemClassRegistry.RegisterXSInfo(TypeInfo(ArrayOfString),'http://passport.shu.edu.cn/', 'ArrayOfString');

客户端使用:

var
 

i:integer;
  aIntf: SLoginServicesSoap;
  soaphead : ShuSoapHeader;
  Headers: ISOAPHeaders;
begin
    aIntf :=sLogin as SLoginServicesSoap;//THTTPRIO控件
   soaphead:=  ShuSoapHeader.Create;
   soaphead.UserID :='';
   soaphead.PassWord := '';
    try
     Headers := (aIntf  as ISOAPHeaders);
     Headers.Send(soaphead);  //发送Soap Header
     i:=aIntf.ValidByEd(Trim(Edit_name.Text),Trim(Edit_pass.Text));
   finally
     aIntf := nil;
     soaphead.Free;
   end;