Delphi7调用.NET(C#)WebService

Delphi调用.NET的WebService,是非常容易和方便的,下面用C#提供的

Login服务,来说明Delphi的调用方法.Login返回的是一个字符串.

一般有以下布骤:

A.调用第一步,完成C#,asmx文件生的调用函数

  1. unit UnitMJWebLogin;  
  2.   
  3.    
  4.   
  5. interface  
  6.   
  7.    
  8.   
  9. uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;  
  10.   
  11.    
  12.   
  13. type  
  14.   
  15.    
  16.   
  17.   
  18.   
  19.   // Namespace : http://tempuri.org/  
  20.   
  21.   
  22.   // soapAction: http://tempuri.org/%operationName%  
  23.   
  24.   // transport : http://schemas.xmlsoap.org/soap/http  
  25.   
  26.   // style     : document  
  27.   
  28.   // binding   : MJLoginSoap  
  29.   
  30.   // service   : MJLogin  
  31.   
  32.   // port      : MJLoginSoap  
  33.   
  34.   // URL       : http://127.0.0.1/EPlatform/bin/MJLogin/MJLogin.asmx  
  35.   
  36.   // ************************************************************************ //  
  37.   
  38.   IMJWebLogin = interface(IInvokable)  
  39.   
  40.   ['{EEAFD61D-DA43-1CB6-C349-E5DD8110DE17}']  
  41.   
  42.    function  Login(const aLoginName: WideString; const aPassword: WideString; const aCPUID: WideString; const aHardDiskID: WideString): string; stdcall;  
  43.   
  44.   
  45.   
  46. {根据ASMX生成的函数}  
  47.   
  48.   
  49.   
  50.   end;  
  51.   
  52.    
  53.   
  54. function GetMJLoginSoap(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IMJWebLogin;  
  55.   
  56.    
  57.   
  58.    
  59.   
  60. implementation  
  61.   
  62. uses  
  63.   
  64.    UnitCommon ;  
  65.   
  66.    
  67.   
  68. function GetMJLoginSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IMJWebLogin;  
  69.   
  70. const  
  71.   
  72.   defWSDL = 'http://127.0.0.1/EPlatform/wsdl/Login.wsdl';  
  73.   
  74.   defURL  = 'http://127.0.0.1/EPlatform/MJLogin/MJLogin.asmx';  
  75.   
  76.   defSvc  = 'MJLogin';  
  77.   
  78.   defPrt  = 'MJLoginSoap';  
  79.   
  80. var  
  81.   
  82.   RIO: THTTPRIO;  
  83.   
  84. begin  
  85.   
  86.   Result := nil;  
  87.   
  88.   if (Addr = '') then  
  89.   
  90.   begin  
  91.   
  92.     if UseWSDL then  
  93.   
  94.       Addr := defWSDL  
  95.   
  96.     else  
  97.   
  98.       Addr := defURL;  
  99.   
  100.   end;  
  101.   
  102.   if HTTPRIO = nil then  
  103.   
  104.     RIO := THTTPRIO.Create(nil)  
  105.   
  106.   else  
  107.   
  108.     RIO := HTTPRIO;  
  109.   
  110.   try  
  111.   
  112.     Result := (RIO as IMJWebLogin);  
  113.   
  114.     if UseWSDL then  
  115.   
  116.     begin  
  117.   
  118.       RIO.WSDLLocation := Addr;  
  119.   
  120.       RIO.Service := defSvc;  
  121.   
  122.       RIO.Port := defPrt;  
  123.   
  124.     end else  
  125.   
  126.       RIO.URL := Addr;  
  127.   
  128.   finally  
  129.   
  130.     if (Result = nil) and (HTTPRIO = nil) then  
  131.   
  132.       RIO.Free;  
  133.   
  134.   end;  
  135.   
  136. end;  
  137.   
  138.    
  139.   
  140.    
  141.   
  142. initialization  
  143.   
  144.   InvRegistry.RegisterInterface(TypeInfo(IMJWebLogin), 'http://tempuri.org/', 'GB2312');  
  145.   
  146.   InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IMJWebLogin), 'http://tempuri.org/%operationName%');  
  147.   
  148.   InvRegistry.RegisterInvokeOptions(TypeInfo(IMJWebLogin), ioDocument);  
  149.   
  150.    
  151.   
  152. end.  
  153.   
  154.    

 

B.调用ASMX,定位WSDL文件位置

  1. procedure TFrm_Login.SetSoapConnection;  
  2. begin  
  3.  self.HTTPRIO_Login.WSDLLocation := 'HTTP://127.0.0.1/EPlatform/wsdl/Login.wsdl';  
  4. end;  

 

C.调用第三步,完成登录事件的编写

  1. procedure TFrm_Login.Btn_SureClick(Sender: TObject);  
  2. var  
  3.   HttpCallResult : string ;  
  4. begin  
  5.   self.SetSoapConnection;  
  6.   try  
  7.   HttpCallResult :=  
  8.    (self.HTTPRIO_Login as IMJWebLogin).Login(Trim(self.ComboBox_LoginName.Text),  
  9.                                               Trim(self.Edit_Password.Text),  
  10.                                               Trim(self.FUser.FCPUID),Trim(self.FUser.FHardDiskID)) ;  
  11.   except  
  12.     showmessage('目前服务器忙,请稍候连接服务器');  
  13.     exit ;  
  14.   end  ;  
  15.   if HttpCallResult='密码错误' then begin  
  16.      showmessage (HttpCallResult);  
  17.      self.Edit_Password.SelectAll;  
  18.      self.Edit_Password.SetFocus;  
  19.      exit;  
  20.   end ;  
  21. end;  

 

D.注意SOAP控件的设置

SOAP

USEUTF8要设为TRUE,否则为乱码。

完成以上步骤,WebService就可以调用成功了.对于复杂的数据要结合XmlDocument一起使用.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值