a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Delphi > 正文

關于C#下寫的Web Service 服務在Delphi下調用時的問題

2024-07-21 02:18:12
字體:
來源:轉載
供稿:網友
關于c#下寫的web service 服務在delphi下調用時的問題

首先我覺得有必要把.net平臺下開發webservice進行一個比較全面的闡述,web service的最初產生是在電子商務的環境下出現的,有些問題通過傳統的手段已經不容易解決,比如在應用程序之間進行商務通信、數據交換,使用dcom、corba等二進制機制的東西已經行不通了,姑且不說他們受各自平臺的限制,比如dcom(distribute common objects model)只能在windows平臺下進行,而corba(common objects request broker architecture)又只是java平臺下的產物。他們要實現應用程序之間的數據通信是比較困難的。

在這種背景下,web services 應運而生,它很好的解決了跨語言、跨平臺以及良好而安全的穿透企業防火墻。它的體系結構大體上分為五個層次:

http(hypertext transfer protocol)信道下進行數據通信
xml(extensable markup language)數據表達形式
soap(simple objects access protocol)的數據封裝
wsdl(webservices description language)的描述語言格式
uddi(universal description and discovery integration) 統一的描述、發現和集成
作為它的優點跨語言、跨平臺以及良好而安全的穿透企業防火墻已經足以使我們感到興奮了。不過它也存在需要改善的地方,比如:

http進行數據通信存在速度較慢的情況,尤其是第一次聯結。
需要一臺web server這一額外的開銷
說了webservices的體系結構以及其優點缺點以后我們切入正題,那就是我們這次討論的話題:

web service 服務在delphi下調用時的問題

閑話少說,我們用一個檢驗webmethod的attribute的一個簡單的例子進行闡述:它是完成一次從客戶a轉帳到b的一個簡單商務過程。

首先我們在.net framework1.1下創建一個webservice,這時候.net會幫我們自動創建一個web應用

我們需要創建一個類attributetest,它是在命名空間namespace attributetesting下的,那么這個類它將自動繼承了它的基類 system.web.services.webservice,需要支出的時,我們可以對這個web應用類設置其webserviceattribute,其中基本屬性包括description 和namespace

[webserviceattribute(namespace="http://www.isdoo.com/services",

description="hello ansel,this is a testing web service!")]

public class attributetest : system.web.services.webservice
{

[webmethodattribute(description="描述信息:繼承了count方法,并且對名稱進行重載。執行的是把錢從a用戶轉帳到b用戶......",
//messagename="changing messagename",
bufferresponse=true,
cacheduration=1000,
enablesession=true,
transactionoption=transactionoption.requiresnew)]
public string transmoney(double money)
{
try
{
contextutil.enablecommit();//transaction only used to database operation!
moneyintoa(money);
moneyoutfromb(money);
contextutil.setcomplete();
return "transaction successful,total "+money.tostring();
}
catch( exception e)
{
contextutil.setabort();
return "transaction failed! /n/r "+e.message;
}
}
private void moneyintoa(double money)
{
sqlcommand sqlcom = new sqlcommand("update budget set money=money+"+money.tostring()+" where name='a'");
databaseaccess mydatabase = new databaseaccess();
sqlcom.connection=mydatabase.getconnection();
sqlcom.connection.open();
sqlcom.executenonquery();
sqlcom.connection.close();
//throw new exception("operation failed when transfer money into a!");
}

private void moneyoutfromb(double money)
{
sqlcommand sqlcom = new sqlcommand("update budget set money=money-"+money.tostring()+" where name='b'");
databaseaccess mydatabase = new databaseaccess();
sqlcom.connection=mydatabase.getconnection();
sqlcom.connection.open();
sqlcom.executenonquery();
sqlcom.connection.close();
//throw new exception("operation failed when transfer money from b!");
}

}

其中我們需要特別注意的是,webmethodattribute,這也是我們這一次需要講述的重點內容,只要給一個方法加上[webmethodattribute],哪怕里面沒有任何屬性,那么webservice就會把這個方法暴露(expose)給了客戶段調用者.下面我們講述一下它的6個屬性,其中包括2個描述性的信息屬性,4個功能屬性

描述性的信息屬性:

description
messagename
4個功能性屬性:

bufferresponse
cacheduration
enablesession
transactionoption
其中我們需要注意messagename這個屬性它delphi調用.net平臺下開發的webservice的時候,如果你設置了messagename這個attribute的話,那么客戶端調用時會報錯誤。這也許是一個bug,或許后面的版本會解決這個問題。至于這幾個屬性的具體功能就不再這里詳細描述了。大家可以去看看相關的書籍。

下面我把delphi調用webservice的步驟列舉一下:

首先如果你只是開發調用客戶端,那么你只需要創建一個普通的應用程序即可,然后需要你做的是,在工具欄webservices下面找到soaphttpclient這個控件,然后把它放在你的客戶端應用窗體上;

其次就是你需要設置這個soaphttpclient的屬性url或者wsdl,這個內容就是你的webservice的服務地址

比如我們當前例子的服務地址是:http://localhost/attributetesting/attributetesting.asmx

如果你想輸入wsdl那么就是http://localhost/attributetesting/attributetesting.asmx?wsdl

這樣就完成了控件設置;

然后我們需要引入服務器端的wsdl,你可以手工來做,也可以用delphi提供的webservices importer功能來引入。

最后你只需要對引入的wsdl的接口進行調用即可。在這里我們的對應代碼是:

procedure tform1.bitbtn1click(sender: tobject);
var
aa:attributetestsoap;//這個就是wsdl下的類接口對象
msg:widestring;
bb:double;
begin
//httprio2 其實就是所謂的代理類,它負責進行數據傳輸發送request和接受response的
aa:=httprio2 as attributetestsoap;

bb:=100.00;
msg:=aa.transmoney(bb);//這就是調用web服務所暴露給我們的web服務方法webmethod
showmessage(msg);
end;


ok! that's all!


商業源碼熱門下載www.html.org.cn

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久久久综合 | 亚洲自拍av在线 | 色吊丝2288sds中文字幕 | 成人免费视频观看视频 | 午夜精品久久久久久久星辰影院 | 亚洲h视频在线观看 | 99精品久久久久久久免费看蜜月 | 嫩草午夜少妇在线影视 | 成人黄视频在线观看 | 一级毛片视频 | 一级a毛片 | 激情视频在线观看 | 午夜无码国产理论在线 | 电影k8一区二区三区久久 | a级毛片基地 | 亚洲精品午夜国产va久久成人 | 日日摸夜夜添夜夜添亚洲女人 | 羞羞的视频网站 | 午夜私人影院在线观看 | 狠狠做深爱婷婷久久综合一区 | 国产免费自拍 | 美女131mm久久爽爽免费 | avmans最新导航地址 | 日一区二区 | 久久久亚洲一区 | 中文字幕第九页 | 国产精品久久久久久久久久久新郎 | 999视频在线免费观看 | 国产高清免费视频 | 亚洲视频在线免费观看 | 一本久久道| 国产精品久久久久久久久免费 | 国产精品理论片 | 色综合久久天天综合网 | 欧美日韩成人在线 | 涩涩操| 国产免费一区二区三区 | 精品一区二区久久久久久久网站 | 欧美日韩视频在线第一区 | 欧美久久久久久 | 深夜av在线 |