Delphi調用 C# 寫的webservice

Delphi調用 C# webservice總結  

用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」。

如圖:


Delphi調用webservice總結 - czaiq - czaiq的博客
 

五、接口函數的聲明已經完成,下面就是要實現這個函數了。打開接口實現單元(MainImpl),

在public中寫上該函數的聲明,在implement後寫該函數的實現。如圖:


Delphi調用webservice總結 - czaiq - czaiq的博客
 

六、到此,WebService已經撰寫完畢。接下來是調試。在咱們新建的時候,Delphi已經爲咱們   創建了一個Unit1和其窗體,在Unit1中引用接口單元(MainImpl),而後在窗體中加一個   按鈕,在按鈕的單擊事件中調用剛纔寫的WebService函數就能夠調試了,代碼如圖:


Delphi調用webservice總結 - czaiq - czaiq的博客
 

或者使用THTTPRIO控件


Delphi調用webservice總結 - czaiq - czaiq的博客
 

七、調試成功後就能夠轉類型了,將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總結 - czaiq - czaiq的博客
 

九、如何用Delphi調用剛纔寫的WebService。在瀏覽器中輸入剛纔站點的路徑,如:   http://127.0.0.1/project2.dll,瀏覽器轉到項目所在文件夾,如圖:


Delphi調用webservice總結 - czaiq - czaiq的博客
 

打開以下圖所示的的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/]

相關文章
相關標籤/搜索