Delphi XE5通過WebService開發Web服務端和手機客戶端
2017/03/02
---------------------------------------------------------------------------------------------------------------------
按“delphi2010 開發及調試WebService 實例”步驟到第7步時點擊WSDL出現不了XML文檔,最后生成文件失敗。對WebService開發一竅不通,具體原因不明。
在此希望有了解此道的大俠指點。
網絡上可供測試的Web Service
參考:
Delphi 調用webservice接口
2017/03/02
---------------------------------------------------------------------------------------------------------------------
前些天用網友“delphi2010 開發及調試WebService 實例”的方法一直沒有成功,今天無意中試通了。在此記錄一下過程:
添加網站,使用“DefaultAppPool”,在“處理程序映射”里使用與“DefaultAppPool”對應的“ISAPI-dll”進行編輯。最后如果在物理路徑里有生成“web.config”刪掉。
瀏覽,如果有錯誤按提示排除即可。
2017/03/02
---------------------------------------------------------------------------------------------------------------------
1、創建Webservices 服務端;
2、在Windows 上添加IIS;
3、啟動IIS;
4、配置IIS運行Webservices 服務端;
5、創建Webservices 客戶端,運行並調用Webservices 服務端方法。
DelphiXE7中創建WebService(服務端+客戶端) good
2017/03/08
---------------------------------------------------------------------------------------------------------------------
Webservices 客戶端:
1、創建一個VCL application工程;
2、“File”->“New”->“Other...”->“Delphi Projects”->“WebSrvice”->“WSDL Importer”
3、在彈出窗口“WSDL Source”中輸入“http://localhost:7923/ReporInfo.dll/wsdl/IMyTest”(前面頁面的可生成xml的地址)->“Next”->默認選項->“Finish”
4、delphi會自動引入一個單元,這個單元就是WebService的接口單元,里面會自動生成一個Get開頭方法。
5、在VCL單元引用這個接口單元,
使用方法1:
在Form上分別放置TButton、THTTPRIO;
修改HTTPRIO1屬性:
a、WSDLLocation: http://localhost:7923/ReporInfo.dll/wsdl/IMyTest(必須先做這一步以下兩個屬性才有可選項)
b、Service:(下拉可選)
c、Port:(下拉可選)
在TButton->Click事件里編寫代碼
procedure TForm1.Button1Click(Sender: TObject); var AOS: String; begin AOS := (HTTPRIO1 as IMyTest).SayHello('勵研科技'); ShowMessage(AOS); end;
使用方法2:
在Form上放置TButton,在TButton->Click事件里編寫代碼
procedure TForm1.Button1Click(Sender: TObject); var obj: IMyTest; s: String; begin obj := GetIMyTest(); s := obj.SayHello('阿米'); ShowMessage(s); end;
6、因為字符編碼格式的不同,在接口單元有兩處需要修改
function GetIMyTest(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IMyTest; const defWSDL = 'http://localhost:7923/ReporInfo.dll/wsdl/IMyTest'; defURL = 'http://localhost:7923/ReporInfo.dll/soap/IMyTest'; defSvc = 'IMyTestservice'; defPrt = 'IMyTestPort'; 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; RIO.HTTPWebNode.UseUTF8InHeader:= True; //這里加上這一句 try Result := (RIO as IMyTest); 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(IMyTest), 'urn:MyTestIntf-IMyTest', ''); InvRegistry.RegisterDefaultSOAPAction(TypeInfo(IMyTest), 'urn:MyTestIntf-IMyTest#SayHello'); InvRegistry.RegisterInvokeOptions(TypeInfo(IMyTest), ioDocument);//這里加上這一句
7、編譯、執行;