抓蟲記之二 WSDL中消失的函式定義

2021-05-26 12:21:04 字數 974 閱讀 7103

還是那句老話,現象總是撲朔迷離。

這次的現象更加奇怪,在乙個webservice的介面定義中,某個新定義的方法總是看不到。可是看了實現**,確實已經公布了。這是為什麼呢?

先說明一下實現環境,這個是在delphi環境下編寫webservice的。大家可能說visualstudio就不會有這樣的問題了,這個我不否認,但是我相信了解這個過程,對大家會有很多幫助的。

其實,不管哪種語言,wsdl的描述基本都是自動生成的,也不需要我們去做任何額外工作。但是,既然這裡面出現了問題,就只能硬著頭皮去了解這些內部實現了。

在delphi中,是在webmodule中的twsdlhtmlpublish型別的元件來完成的。而這個元件,在獲取http請求之後,在介面定義中查詢,找到後,依據rtti,翻譯成wsdl描述語言。

在跟蹤**的過程中,發現找到介面之後,明明介面定義了12個方法,偵錯程式卻只顯示10個方法,少了2個方法。甚麼原因呢?

說實話,我不是聖人。我一開始確實懷疑delphi的編譯器出問題了。但後來強迫自己休息了一下之後,突然領悟到,既然方法不一樣多,是不是找錯了介面定義呢?

這是乙個偉大的跳躍式思維。因為,我開始懷疑錯誤**於我自己。很多時候就是這樣,懷疑別人,總是找不到答案。懷疑自己,卻只有一步之遙就可以成功。

原來,我在實現這個webservice的時候,由於協作的需要,需要呼叫其他的webservice。本來這是沒有問題的。但是,我做了乙個偷懶的工作。我把一些常用的webservice全部集中起來了,這樣其他應用程式呼叫的時候非常方便。不巧的是,這些常用的webservice中,就包含今天出錯的這個。

也就是說,在伺服器的實現過程中,很可能出現了介面的重複定義!因為delphi在伺服器註冊機制,和客戶端**(proxy)的註冊機制是一樣的,這導致了衝突!

檢查了一下**,果然如此。原來,由於伺服器新的介面一直沒發布,所以,伺服器的客戶端**介面也沒更新,這樣,就出現了兩個版本的介面定義。

開頭出現的消失的函式定義,在調整完介面註冊順序,又神奇般出現了。

抓蟲記之二 WSDL中消失的函式定義

還是那句老話,現象總是撲朔迷離。這次的現象更加奇怪,在乙個webservice的介面定義中,某個新定義的方法總是看不到。可是看了實現 確實已經公布了。這是為什麼呢?先說明一下實現環境,這個是在delphi環境下編寫webservice的。大家可能說visualstudio就不會有這樣的問題了,這個我...

抓蟲記之九 都是執行緒惹的禍

在發生的時候,沒有丟擲異常現象,這樣的bug是很難進行跟蹤的。你只有通過各種方向的分析,調查,才能慢慢的找到。這就好像,突然發現乙個屍體,你就得到失蹤人口裡去尋找,可是是否找得到,有時候可能就是運氣問題。幸好,軟體不是現實,我們可以反覆的進行除錯。同樣是上次案例的那個伺服器。有一段時間發現伺服器在自...

遊食記之二

2009年9 月30日東方既白 地點 張江傳奇 服務 kfc 的兄弟品牌,經營模式和 kfc基本一樣。中式快餐店。品種 各種 飲料。18元以上。飲料 包括豆漿 粥 4.5元以上。人均 22元左右。品質 差強人意,比食堂強些,但是和飯店差多了。畢竟是快餐。口味偏甜。太多次了味千拉麵 地點 很多地方 服...