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打開就成功了
| Project25 - PortTypes: | |||
|
|||
| 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閃退,用火狐瀏覽器打開地址正常。
