麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

關(guān)于C#下寫的Web Service 服務(wù)在Delphi下調(diào)用時的問題

2024-07-21 02:18:12
字體:
供稿:網(wǎng)友
關(guān)于c#下寫的web service 服務(wù)在delphi下調(diào)用時的問題

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

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

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

http進(jìn)行數(shù)據(jù)通信存在速度較慢的情況,尤其是第一次聯(lián)結(jié)。
需要一臺web server這一額外的開銷
說了webservices的體系結(jié)構(gòu)以及其優(yōu)點缺點以后我們切入正題,那就是我們這次討論的話題:

web service 服務(wù)在delphi下調(diào)用時的問題

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

首先我們在.net framework1.1下創(chuàng)建一個webservice,這時候.net會幫我們自動創(chuàng)建一個web應(yīng)用

我們需要創(chuàng)建一個類attributetest,它是在命名空間namespace attributetesting下的,那么這個類它將自動繼承了它的基類 system.web.services.webservice,需要支出的時,我們可以對這個web應(yīng)用類設(shè)置其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方法,并且對名稱進(jìn)行重載。執(zhí)行的是把錢從a用戶轉(zhuǎn)帳到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,這也是我們這一次需要講述的重點內(nèi)容,只要給一個方法加上[webmethodattribute],哪怕里面沒有任何屬性,那么webservice就會把這個方法暴露(expose)給了客戶段調(diào)用者.下面我們講述一下它的6個屬性,其中包括2個描述性的信息屬性,4個功能屬性

描述性的信息屬性:

description
messagename
4個功能性屬性:

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

下面我把delphi調(diào)用webservice的步驟列舉一下:

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

其次就是你需要設(shè)置這個soaphttpclient的屬性url或者wsdl,這個內(nèi)容就是你的webservice的服務(wù)地址

比如我們當(dāng)前例子的服務(wù)地址是:http://localhost/attributetesting/attributetesting.asmx

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

這樣就完成了控件設(shè)置;

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

最后你只需要對引入的wsdl的接口進(jìn)行調(diào)用即可。在這里我們的對應(yīng)代碼是:

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

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


ok! that's all!


商業(yè)源碼熱門下載www.html.org.cn

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

圖片精選

主站蜘蛛池模板: av在线更新 | 一级黄色av电影 | 久久一区国产 | 在线天堂资源 | 免费一级毛片在线播放不收费 | 精品国产一区二区三区在线观看 | 毛片免费在线观看 | av手机免费在线观看 | 国产精品99久久久久久宅女 | 18视频在线观看娇喘 | 国产韩国精品一区二区三区久久 | 日本中文一级片 | 91羞羞 | 黄色毛片一级视频 | 成人 日韩| 久久久新| 在线成人影视 | 久久久久久久久久亚洲 | 中午字幕无线码一区2020 | 在线视频a | 久久毛片免费 | 国产精品久久久久无码av | 日韩欧美电影一区二区三区 | 玩偶姐姐在线观看免费 | 特级黄色一级毛片 | av手机在线电影 | 亚洲午夜免费电影 | 国产精品成年片在线观看, 激情小说另类 | 免费国产网站 | 久久综合九色 | 欧美日韩免费在线观看视频 | 久久久久久久久久久一区 | 欧美激情精品久久久久久久久久 | 黄视频免费在线观看 | 久久久久久久九九九九 | 亚洲射逼| 欧美特级黄色 | 在线播放污 | 日本aaaa片毛片免费观看视频 | 娇喘视频在线观看 | 日本aaaa片毛片免费观蜜桃 |