delphi2010 開發及調試WebService 實例


delphi2010 開發及調試WebService 實例

 

基於Delphi的WebService編寫

 

Delphi編寫soap服務器與客戶端程序

 

Delphi XE5通過WebService開發Web服務端和手機客戶端

 

2017/03/02

---------------------------------------------------------------------------------------------------------------------

按“delphi2010 開發及調試WebService 實例”步驟到第7步時點擊WSDL出現不了XML文檔,最后生成文件失敗。對WebService開發一竅不通,具體原因不明。

在此希望有了解此道的大俠指點。

 

網絡上可供測試的Web Service

 

參考:

WebService 的創建,部署和使用

 

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、編譯、執行;

 


免責聲明!

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



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