DataSnap 2009 系列之二 (方法篇)

2021-05-24 02:20:01 字數 2209 閱讀 1747

在過去客戶端要呼叫遠端伺服器的方法需要通過在tlb裡新增介面並且在伺服器物件中實現,在datasnap 2009中呼叫遠端伺服器的方法是基於delphi的rtti機制的,想要乙個類允許被遠端呼叫需要做以下兩點:

1.把該類和dsserverclass連線在一起

注意:dsserverclass必須設定要匯出的類 否則會出現songetclassnotset的異常資訊

2.該類必須使用$methodinfo編譯指令生成詳細的rtti資訊

所以我們使用嚮導新增的servermodule 不需要再手動新增$methodinfo開關,同樣我們也可以不用繼承自 tdsservermodule來實現我們的serverclass,只要從tpersistent繼承乙個類 並且用和包圍就可以輸出成員函式到客戶端。

注意:要輸出的成員函式必須宣告為public

客戶端呼叫可以使用兩種方法:

1.使用sqlservermethod元件

通過設定其servermethodname屬性來進行遠端呼叫 使用params屬性來傳遞引數和結果值

2.使用本地**類

選中sqlconnection元件,在右鍵選單中單擊generate datasnap client classe 生成**類單元。

下面我們通過乙個簡單的demo來展示datasnap 2009的遠端方法呼叫,我們在服務端定義了4個輸出的成員函式:

由於在datasnap內部是使用tdbxvalue來管理引數列表的,所以使用string等delphi語言自帶的型別將會進行相應的對映。使用tdbxvalue也是效率最高的,以下是可以作為引數使用的tdbxvalue列表。

tdbxwidestringvalue

tdbxansistringvalue

tdbxint16value

tdbxint32value

tdbxint64value

tdbxsinglevalue

tdbxdoublevalue

tdbxbcdvalue

tdbxtimevalue

tdbxdatevalue

tdbxtimestampvalue

tdbxbooleanvalue

tdbxreadervalue

tdbxstreamvalue

我們分別使用sqlservermethod和**類完成對服務端hello方法的呼叫

這裡引數使用了索引值進行訪問傳遞的順序是從左到右新增到params列表 返回值是在列表的最後乙個位置,同樣也可以使用 parambyname(引數名稱).value的形式傳遞引數 返回值的名稱預設是'returnparameter'。使用**類呼叫的方法和呼叫本地方法區別不大 因為遠端呼叫的具體過程已經被**類封裝可以看下**類中生成的hello方法。

我們看到**類使用了比sqlservermethod更低階的dbxcommand進行了封裝 以更友好的方式給我們使用

下面我們用tstream返回乙個結構體並且在客戶端讀出

服務端部分

注意:寫完資料以後需要定位到頭部 否則客戶端得到的資料長度為0

客戶端部分

最後乙個函式演示了使用var和out關鍵字來返回引數,以下是可以使用這兩個關鍵字的標量值型別:

boolean

smallint

integer

int64

single

double

ansistring

string

tdbxtime

tdbxdate

再加上其他的引數型別

tstream

tdataset

tparams

tdbxreader

tdbxconnection

但是在實際測試過程中發現在使用string型別做out和var的引數時 無法使用,跟蹤發現原始碼中ansistring和 string的相關**已經被注釋掉 估計是有bug存在所以不支援 以後應該可以修復。

以下摘自dsreflect單元的 procedure tdsmethodvalues.assignparametervalues(parameters: tdbxparameterarray);

2009 CSDN SD2 0大會系列之雲(一)

池建強 技術總監 用友軟體工程公司雲計 算,雲服務 雲平台 soa之後,cloud正成為乙個新的熱點 常常有人問我,雲和傳統分布式有什麼區別,雲和傳統託管有什麼區別?我總是用下面的例子來解釋,傳統的乙個分布式計算,託管在某個服務商那,有一天發現需要增加計算資源,伺服器由5台變10臺,傳統服務商會告訴...

2009 CSDN SD2 0大會系列之雲(二)

隨著雲的概念提出來,各種新名詞應運而出,雲計算,雲服務,雲平台,怎麼理解和區分這些概念呢?就我的理解而言,雲最初是以一種可擴充套件的動態的計算能力提出來的,amazon最初介紹自己的ec2時,往往會給出乙個pdf轉換的例子,具體來說就是把4tb的資料通過ec2的100個節點轉換為11million個...

閱讀書目 2023年 孩子有關系列

書 名 嬰兒兒童和青少年 作 者 美 貝克 berk l.e 著 桑標 等譯 出 版 社 上海人民出版社 字 數 1704000 版 次 1 頁 數 990 開 本 16開 印 次 1 紙 張 膠版紙 書 名 慢養 給孩子乙個好性格 作 者 黑幼龍等著出 版 社 中信出版社 字 數 145000 版...