WebService 服務端客戶端 實例 HTTPRIO (一) SOAP WSDL


  Delphi中WebService包含的組件解釋(有7個)  
   (1) THTTPRIO-------:使用Http消息來調用遠程使用SOAP的接口對象     (2) THTTPReqResp---:給服務器發送一個SOAP消息, THTTPReqResp在可調用接口上執行一個方法請求.    
   (3) TOPToSoapDomConvert ----:TOPToSoapDomConvert處理Soap方法請求的組合與分發  
   (4) TSoapConnection:TSoapConnection在客戶端的多層數據庫應用中創建並維護客戶端和作為WebService 的遠程應用服務器間的連接     (5) THTTPSoapDispatcher -----:通過將Soap消息轉發給調用者,THTTPSoapDispatcher對Soap消息做出響應.  
   (6) TWSDLHTMLPublish -----:TWSDLHTMLPublish發布描敘webService應用的Wsdl文檔 
    (7) THTTPSoapPascalInvoker -----:THTTPSoapPascalInvoker解釋Soap的請求信息,並執行相應的可調用接口.

 Webservice肯定有wsdl地址描述

一、服務端

1、File>New>WebService>Soap Server Application

2、Stand-alone vcl Application>VCL Application/FireMonkey Application我選VCL

3、8080 Test Port

4、Add New WebService  Service Name :soapTest

5、Add Function GetTime

soapTestIntf.pas

    function echoEnum(const Value: TEnumTest): TEnumTest; stdcall;
    function echoDoubleArray(const Value: TDoubleArray): TDoubleArray; stdcall;
    function echoMyEmployee(const Value: TMyEmployee): TMyEmployee; stdcall;
    function echoDouble(const Value: Double): Double; stdcall;

soapTestImpl.pas

function TsoapTest.echoEnum(const Value: TEnumTest): TEnumTest; stdcall; begin   { TODO : Implement method echoEnum }   Result := Value; end;

function TsoapTest.echoDoubleArray(const Value: TDoubleArray): TDoubleArray; stdcall; begin   { TODO : Implement method echoDoubleArray }   Result := Value; end;

function TsoapTest.echoMyEmployee(const Value: TMyEmployee): TMyEmployee; stdcall; begin   { TODO : Implement method echoMyEmployee }   Result := TMyEmployee.Create; end;

function TsoapTest.echoDouble(const Value: Double): Double; stdcall; begin   { TODO : Implement method echoDouble }   Result := Value; end;

String TGetTimeImpl::GetTime(void)
{
 String str;
 str = Now();

}

Application后生成3個組件WebModuleUnit1.pas
一個是調用者組件:THTTPSoapPascalInvoker:完成Soap消息和....
一個是調度者組件:THTTPSoapDispatcher:自動響應送入的soap消息,並且把他們傳遞給調用者,可以使用他的WebDispatch屬性來識別應用程序響應的http請求.
      包括設置PathInfo屬性來指明指向應用程序的任何URL的路徑部分,設置MethodType屬性來指明請求消息的方法頭.
一個是WSDL發布者:TWSDLHTMLPublisher:WSDL發布者發布描敘接口以及如何調用他們的wsdl文檔,使用非delphi編寫的客戶端程序也可以調用WebService應用程序.
 

用open Browse打開就成功了

http://localhost:8080/

  Project25 - PortTypes:
   
 
  • IsoapTest [WSDL]
    • echoEnum
    • echoDoubleArray
    • echoMyEmployee
    • echoDouble
    • sum
    • GetTime
 
  • IWSDLPublish [WSDL]
      Lists all the PortTypes published by this Service
    • GetPortTypeList
    • GetWSDLForPortType
    • GetTypeSystemsList
    • GetXSDForTypeSystem
  WSIL:  Link to WS-Inspection document of Services here
   

二、客戶端 Windows調用

方法一 

1、New VCL Application

2、Add HTTPRIO Component

3、IDE Menu Component>Import WSDL XE下目前這一步到url地址不成功,導入服務段保存的wsdl文件成功了

導入后系統生成IsoapTest1.pas文件

調用sum函數

 

  HTTPRIO1.URL := 'http://127.0.0.1:8080/'; 這樣報錯

 

  HTTPRIO1.URL := 'http://127.0.0.1:8080/soap/IsoapTest';
//  HTTPRIO1.URL:='http://localhost:8080/soap/IsoapTest';

這兩種方式都可以

  Caption := FloatToStr((HTTPRIO1 as IsoapTest).sum(3, 6));

procedure TForm25.btnTimeClick(Sender: TObject);
begin
  HTTPRIO1.URL := 'http://127.0.0.1:8080/soap/IsoapTest';
  Caption := (HTTPRIO1 as IsoapTest).GetTime;
end;

返回服務器的時間了

 

方法二

1、File>New>Other>WebService>Stand alone Application>VCL Application> WSDL Importer ... >Next>Finish

2、Add Form ,Add HTTPRIO Component

 

三、客戶端android調用

FireMonkey是跨平台,支持windows、android、ios

方法一、

1、New FireMonkey Application

2、IDE Menu Component >WSDL

3、輸入URL地址OK啦

方法二、

1、File>New>Other>WebService>Stand alone Application>FireMonkey  Application> WSDL Importer ... >Next>Finish

2、Add Form ,Add HTTPRIO Component

 

2019.4.22

本機開發的Webservice,用2345瀏覽器打開就報錯,服務端EXE閃退,用火狐瀏覽器打開地址正常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM