用delphi的THTTPRIO控件調用了c#寫的webservice。
下面是我調試時遇到的一些問題:
1,導入wsdl文件:file--new----other----wenservice---WSDLimporter---輸入wsdl地址:如下:http://10.0.1.128:7777/ShineMediaPublish/WebService/WebServiceCall.asmx?wsdl
注意末尾的:'?wsdl'不能少。要不可能會說找不到。
2,設置THTTPRIO控件的屬性:
後來賦給URL屬性,就不報錯了。
3,傳遞參數是web服務端總為空:
在導入的接口單元的聲明部分添加如下代碼:
InvRegistry.RegisterInvokeOptions(TypeInfo(WebServiceCallSoap),ioDocument);//其中紅色部分為導入接口名稱。
下面是客戶端的簡單代碼:
procedure TForm1.btn1Click(Sender: TObject);
var
s:WideString;
begin
s:='打分得分';
edt1.Text:=(htpr1 as WebServiceCallSoap).OperaterLogin('1','dd',s);//operaterLogin為接口方法。
end;
end.
==========================================================================
下面說明如何編寫用於IIS發布的ISAPI類型的WebService。
1、 New|Other|WebServices|SOAP Server Application|這裡先選擇建立Web App Debugger類型的WebService,因為這種類型的WebService便於調試,
當我們調試好它,准備發布時再將 此類型轉換為ISAPI類型。
2、 選擇Web App Debugger後,隨便輸入一個ClassName,這裡我們輸入“Test”
3、 隨後Delphi會詢問你是否建立接口單元,選擇是,然後輸入接口的名字,我們輸入Main,
Delphi將自動建立接口單元(名字為你輸入的接口名+Intf結束,即MainIntf)和實現接口的單 元(名字為你輸入的接口名+Impl,即MainImpl)。到此一個空的WebService已建立好。
4、 接下來我們將編寫供別人調用的WebService函數。在此我們編寫一個簡單的例子。打開接口單元
(MainIntf),在Type後,接口聲明後添加接口函數
“function GetMsg(AMsg: string): String; stdcall;”,函數後面必須加上“stdcall”。
5、接口函數的聲明已經完成,下面就是要實現這個函數了。打開接口實現單元(MainImpl),
在public中寫上該函數的聲明,在implement後寫該函數的實現。
6、到此,WebService已經撰寫完畢。接下來是調試。在我們新建的時候,Delphi已經為我們建立了一個Unit1和其窗體,在Unit1中引用接口單元(MainImpl),然後在窗體中加一個
按鈕,在按鈕的單擊事件中調用剛才寫的WebService函數就可以調試了,
7、調試成功後就可以轉類型了,將Web App Debugger類型轉換為ISAPI類型其實很簡單,我們先重新建一個ISAPI類型的WebService項目,依次選擇New|Other|WebServices|SOAP Server Application|ISPA/…,提示是否創建接口時選擇“是”,然後輸入和剛才一
樣的接口名,接著保存好,然後將調試成功的Web App Debugger類型的WebService項目中的
接口單元和接口實現單元復制替換掉剛剛創建的ISAPI類型項目中的接口單元和接口實現單元,
然後打開ISAPI類型的WebService,編譯生成dll。至此ISAPI類型的WebService建立成功。
8、將ISAPI類型的WebService發布到IIS上。在IIS中新建站點,新建時將執行權限設置成“腳本
和可執行文件”,將WebService整個項目拷貝到站點文件夾下,啟動站點,該WebService就算
發布成功了,如果IIS是6.0以上的注意在Web服務擴展中將“所有未知ISAPI擴展”設置為允許,
具體設置可參見IIS幫助文檔。
9、如何用Delphi調用剛才寫的WebService。在浏覽器中輸入剛才站點的路徑,如:
http://192.168.1.5:90/,浏覽器轉到項目所在文件夾,
點擊bin,打開生成的dll文件夾,再點擊生成的dll文件,打開如下圖所示的的dll描述頁面,
該dll中有三個接口函數HZ,LJ,SaveData,它們都是供別人調用的接口函數。
點擊WSDL打開WSDL描述頁面,此時復制該頁面的網址,這個網址是我們要用到的。
10、 得到網址後,新建一個Application,我們就在這個Application中調用剛才的WebService。
依次點擊New|Other|WebServices|WSDL Import,如後提示輸入網址,我們輸入剛才復制的網址,點擊next,finish,此時Delphi將自動添加一個單元,該單元就是調用WebService的
單元,有了這個單元我們就可以調用WebService了。在Unit1中引用該單元,再添加一個按鈕 在按鈕的單擊事件中聲明一個接口對象,然後調用自動生成單元中的GetMainIntf(該方法是
自動生成的)函數給這個接口對象賦值,然後就可以用這個接口對象調用接口函數了。