8.1.2 關於命名空間
函式ns1__getquote(上節提到的)中,使用了ns1__作為遠端方法的命名空間。使用命名空間是為了防止遠端方法名衝突,比方多個服務中使用同乙個遠端方法名的情況。
命名空間字首及命名空間名稱同時也被用來驗證soap資訊的內容有效性。存根例程通過命名空間表中的資訊來驗證服務返回資訊。命名空間表在執行時被取出用於解析命名空間繫結,反序列化資料結構,解碼並驗證服務返回資訊。命名空間表不應該包含在gsoap預編譯器所需輸入的標頭檔案中。在18.2節中將會對命名空間表做詳細介紹。
delayed stock quote服務客戶端的命名空間表如下:
struct namespace namespaces =
, // 必須是第一行
, // 必須是第二行
, // 必須是第三行
, // 2001 xml 大綱
, // 通過服務描述獲取
// 結束
}; 第一行命名空間是soap1.1協議預設命名空間。事實上,命名空間表就是用來讓程式設計師可以規定soap編碼方式,能夠用包含命名空間的命名空間字首來滿足指定soap服務的命名空間需求的。舉例來說,使用前面命名空間表中定義的命名空間字首ns1,存根例程就可以對getquote方法的請求進行編碼。這個過程由gsoap預編譯器通過在getquote.h檔案中定義的包含字首ns1的ns1__getquote函式自動完成。通常,如果要在遠端方法名,結構名,類名,欄位名等結構或類中使用命名空間字首,就必須在命名空間表中進行定義。
命名空間表將會被存根例程封裝,並按下面的形式輸出:
這個命名空間繫結將被soap服務用來驗證soap請求。
8.1.3 例子
使用命名空間字首可以解決在不同的服務中使用相同名稱的遠端方法的問題,看下面的例子:
// contents of file "getquote.h":
int ns1__getquote(char *symbol, float &result);
int ns2__getquote(char *ticker, char *"e);
這個例子允許客戶端程式使用不同的命名空間以便連線到不同的服務程式執行其中的遠端方法。
命名空間字首也可以用在類宣告中使用,在xml大綱中區分同名但不同命名空間的soap值。例如:
class e__address // an electronic address
; class s__address // a street address
; 在生成的序列化函式中,使用e__address的乙個例項來表示e命名空間字首的乙個位址元素型別。
me@home
www.me.com
用s__address的乙個例項來表示s命名空間字首的乙個位址元素型別。
technology drive
5softcity
客戶端程式的命名空間表必須有e和s的資料型別定義:
struct namespace namespaces =
, ,
...
命名空間表必須作為客戶端程式的一部分,使客戶端程式在執行時可以對資料進行序列化及反序列化。
gsoap中文文件(1 介紹)
1.介紹 gsoap編譯工具提供了乙個soap xml 關於c c 語言的實現,從而讓c c 語言開發web服務或客戶端程式的工作變得輕鬆了很多。絕大多數的c web服務工具包提供一組api函式類庫來處理特定的soap資料結構,這樣就使得使用者必須改變程式結構來適應相關的類庫。與之相反,gsoap利...
gsoap中文文件(1 介紹)
1.介紹 gsoap編譯工具提供了乙個soap xml 關於c c 語言的實現,從而讓c c 語言開發web服務或客戶端程式的工作變得輕鬆了很多。絕大多數的c web服務工具包提供一組api函式類庫來處理特定的soap資料結構,這樣就使得使用者必須改變程式結構來適應相關的類庫。與之相反,gsoap利...
Pentaho bi 中文文件
目錄 building and debugging pentaho with eclipse zh cn 1.5.4 getting started with the bi platform zh cn 1.5.4 pentaho building components 1.5.4 pentaho ...