用delphi的THTTPRIO控件調用了c#寫的webservice。html
下面是我調試時遇到的一些問題:java
1:導入wsdl文件:file--new----other----webservice---WSDLimporter---輸入wsdl地址:以下:http://127.0.0.1/ WebService/WebServiceCall.asmx?wsdlweb
注意末尾的:'?wsdl'不能少。要不可能會說找不到。數據庫
2:設置THTTPRIO控件的屬性:apache
把http:// 127.0.0.1 /WebService/WebServiceCall.asmx?wsdl賦給URL屬性,而不是賦給wsdlLocation屬性。c#
3:傳遞參數是web服務端總爲空:瀏覽器
在導入的接口單元的聲明部分添加以下代碼:tomcat
InvRegistry.RegisterInvokeOptions(TypeInfo(Service1Soap),ioDocument);//其中紅色部分爲導入接口名稱。安全
在IIS中配置C#寫的webservice,有時候會出現以下的錯誤:app
--------------------------------------------------------
分析器錯誤消息: 在應用程序級別以外使用註冊爲 allowDefinition='MachineToApplication' 的節是錯誤的。若是在 IIS 中沒有將虛擬目錄配置爲應用程序,則可能致使此錯誤。
源錯誤:
安全身份驗證模式。
-->
<authentication mode="Windows"/>
<!--
若是在執行請求的過程當中出現未處理的錯誤
------------------------------------------------------------------------------
解決方法:
在要發佈的虛擬目錄中的建立一個應用程序。步驟
你的站點 --> 選中你要發佈的虛擬目錄 --> 右鍵單擊 --> 屬性 --> 目錄(選項卡) --> 應用程序名 --> 建立 --> 肯定 。
而後再從新訪問頁面,應該就OK了。
Delphi 7 創建測試程序
一、新建一個應用程序:
二、拖一個button一個edit和一個HTTPRIO(在webservices頁上)到窗體上;
三、接下來:
File-> new-> other-> webservices-> WSDL importer
輸入wsdl文件地址,點擊next 導入
保存unit Service1
四、在unit1(form1 的單元文件)中引用Service1
五、 HTTPRIO1的 URL屬性設置爲 'http://localhost/WebService1/Service1.asmx?WSDL '
六、添加form1 的代碼以下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, InvokeRegistry, Rio, SOAPHTTPClient;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
HTTPRIO1: THTTPRIO;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
Service1;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=(HTTPRIO1 as Service1Soap).HelloWorld;
end;
end.
若是有時候測試發現,仍是不行.......可能有下面的問題,
在用VS2005寫的WebService的類屬性中加入SoapRpcServiceAttribute屬性就能夠了。
如 下:
[SoapRpcService(RoutingStyle=SoapServiceRoutingStyle.SoapAction)]
Delphi開發和調用的webservice
下面說明如何編寫用於IIS發佈的ISAPI類型的WebService。
一、 New|Other|WebServices|SOAP Server Application|這裏先選擇創建Web App Debugger類型的WebService,由於這種類型的WebService便於調試,當咱們調試好它,準備發佈時再將此類型轉換爲ISAPI類型。
二、 選擇Web App Debugger後,隨便輸入一個ClassName,這裏咱們輸入「Test」
三、 隨後Delphi會詢問你是否創建接口單元,選擇是,而後輸入接口的名字,咱們輸入Main,Delphi將自動創建接口單元(名字爲你輸入的接口名+Intf結束,即MainIntf)和實現接口的單元(名字爲你輸入的接口名+Impl,即MainImpl)。到此一個空的WebService已創建好。
四、 接下來咱們將編寫供別人調用的WebService函數。在此咱們編寫一個簡單的例子。打開接口單元(MainIntf),在Type後,接口聲明後添加接口函數
「function GetMsg(AMsg: string): String; stdcall;」,函數後面必須加上「stdcall」。
如圖:
五、接口函數的聲明已經完成,下面就是要實現這個函數了。打開接口實現單元(MainImpl),
在public中寫上該函數的聲明,在implement後寫該函數的實現。如圖:
六、到此,WebService已經撰寫完畢。接下來是調試。在咱們新建的時候,Delphi已經爲咱們 創建了一個Unit1和其窗體,在Unit1中引用接口單元(MainImpl),而後在窗體中加一個 按鈕,在按鈕的單擊事件中調用剛纔寫的WebService函數就能夠調試了,代碼如圖:
或者使用THTTPRIO控件
七、調試成功後就能夠轉類型了,將Web App Debugger類型轉換爲ISAPI類型其實很簡單,咱們先從新建一個ISAPI類型的WebService項目,依次選擇New|Other|WebServices|SOAP Server Application|ISPA/…,提示是否建立接口時選擇「是」,而後輸入和剛纔同樣的接口名,接着保存好,而後將調試成功的Web App Debugger類型的WebService項目中的接口單元和接口實現單元複製替換掉剛剛建立的ISAPI類型項目中的接口單元和接口實現單元,而後打開ISAPI類型的WebService,編譯生成dll。至此ISAPI類型的WebService創建成功。
八、將ISAPI類型的WebService發佈到IIS上。在IIS中新建站點,新建時將執行權限設置成「腳本和可執行文件」,將WebService整個項目拷貝到站點文件夾下,啓動站點,該WebService就算髮布成功了,若是IIS是6.0以上的注意在Web服務擴展中將「全部未知ISAPI擴展」設置爲容許,
具體設置可參見IIS幫助文檔。如圖:
九、如何用Delphi調用剛纔寫的WebService。在瀏覽器中輸入剛纔站點的路徑,如: http://127.0.0.1/project2.dll,瀏覽器轉到項目所在文件夾,如圖:
打開以下圖所示的的dll描述頁面,該dll中有一個個接口函數GetMsg,它們都是供別人調用的接口函數。點擊WSDL打開WSDL描述頁面,此時複製該頁面的網址http://127.0.0.1/project2.dll/wsdl/IMain,這個網址是咱們要用到的。
十、 獲得網址後,新建一個Application,咱們就在這個Application中調用剛纔的WebService。依次點擊New|Other|WebServices|WSDL Import,如後提示輸入網址,咱們輸入剛纔複製的網址,點擊next,finish,此時Delphi將自動添加一個單元,該單元就是調用WebService的單元,有了這個單元咱們就能夠調用WebService了。在Unit1中引用該單元,再添加一個按鈕,在按鈕的單擊事件中聲明一個接口對象,而後調用自動生成單元中的GetMainIntf(該方法是自動生成的)函數給這個接口對象賦值,而後就能夠用這個接口對象調用接口函數了。
注意:若是前臺使用THTTPRIO控件來鏈接,
把http://127.0.0.1/project2.dll/wsdl/IMain賦給wsdlLocation屬性,而不是賦給URL屬性。這點和調用C#不同
Delphi調用JAVA寫的webservice
Java寫服務端的webservice
開發環境
MyEclipse 6.5 + jdk6.0 +tomcat 6.0 + axis2
具體的開發步驟不講,網上都有,只將碰到的幾個問題說下:
一、 安裝axis2的插件,我使用時網上最新版本是1.6.1,下載下面兩個插件
Service Archive Wizard - Eclipse Plug-in
Code Generator Wizard - Eclipse Plug-in
安裝網上方法直接拷貝到plugins目錄,在MyEclipse中new---->other並無出現以下的界面
網上也沒有找到方法,後來找了下面的版本,就是
Axis2_Codegen_Wizard_1.3.0
Axis2_Service_Archiver_1.3.0
直接拷貝到plugins目錄下就能夠;
分析:估計是MyEclipse版本中的Eclpise版本低了,裝不上高版本的1.6.1,反正低版本也好用;
二、在MyEclipse,開發的時候,若是用Axis2 Service Archiver生成服務的話,須要把項目屬性中的java Compiler--->Compiler compliance level:改成5.0,個人都是默認6.0;
要否則最後load不出class中的方法;
三、如須要一些jar文件,好比鏈接數據庫相關的jar,發佈到tomcat中時候,須要把這些文件拷貝到webapps\axis2\WEB-INF\lib下;
四、使用Delphi 7調用axis2寫的webservice,導入wsdl的時候,沒有接口說明,多是delphi的版本過低了,因此使用了delphi 2010導入生成了接口文件,而後用到了delphi 7中也能夠;
五、設置THTTPRIO控件的屬性,應把wsdl賦給URL屬性,和調c#同樣
建議用高版本的開發webservice,如2007,2010等,delphi 7有不少麻煩
轉自[http://blog.163.com/czaiq@126/blog/static/36597146201111604417567/]