由一次WCF專案的需求擴充套件想到的
這個小專案或者說是小功能大約一年以前開發的。現在寫這篇文章只是為了共享這個思路使有同樣需求的人少走彎路。公司其它人員開發了一個適用於pc客戶端呼叫的wcf服務。由於公司新增了android與ios客戶端的開發。所以這些程式碼也需要訪問這個wcf服務,之前讓許多人做別人不是android訪問不到就是對原有wcf改動太大(還有一個 Zhou某某,平時吹的挺牛B,弄了好幾天也沒弄好)。後來領導把這個任務交給了我。接到這個任務後,我分析了下現有的程式碼,由於android與javascript,c#呼叫訪問的資源是一樣的,只不過是訪問方式不同而已。所以最好還是不要動現有的wcf,於是我就另啟了一個wcf服務,專門用來給android訪問。而我的服務接收到andoird的請求後,再訪問原先的wcf服務。這樣做的好處是:
一,可以將程式碼的改動量做到最小,基本上原先的wcf服務不用動,只要改動時,把釋出後的dll檔案替換掉就行。
二,得用反射分析Wcf釋出的dll檔案(這其中用到了部分的編譯原理知識)。
現在簡單描述下這個專案的執行原理:
其實就是讓android訪問wcf時,將要呼叫的方法名及引數,用一個統一的json物件包裝起來。首先根據呼叫的方法名來動態分析dll檔案,查詢是否有此方法,如果沒有則返回錯誤。如果有,則利用反射動態分析些方法,主要是引數及返回值,然後根據獲取到的引數及返回值資訊來將android傳入的json物件一一進行型別轉換,然後呼叫此方法,並將返回值轉換成json,返回給andriod或ios(其實javascript訪問也是這個原理,只不過是wcf配置稍有不同而已)。
這個小專案或者說小功能做好後,執行很穩定。可惜後來由於要寫公司的解析程式及地圖資訊服務,領導把這個專案讓我交給別人了(可能領導到現在還不知道這個方法的原理,也許以後說起時就是別人的功勞了)。
一,可以將程式碼的改動量做到最小,基本上原先的wcf服務不用動,只要改動時,把釋出後的dll檔案替換掉就行。
二,得用反射分析Wcf釋出的dll檔案(這其中用到了部分的編譯原理知識)。
現在簡單描述下這個專案的執行原理:
其實就是讓android訪問wcf時,將要呼叫的方法名及引數,用一個統一的json物件包裝起來。首先根據呼叫的方法名來動態分析dll檔案,查詢是否有此方法,如果沒有則返回錯誤。如果有,則利用反射動態分析些方法,主要是引數及返回值,然後根據獲取到的引數及返回值資訊來將android傳入的json物件一一進行型別轉換,然後呼叫此方法,並將返回值轉換成json,返回給andriod或ios(其實javascript訪問也是這個原理,只不過是wcf配置稍有不同而已)。
這個小專案或者說小功能做好後,執行很穩定。可惜後來由於要寫公司的解析程式及地圖資訊服務,領導把這個專案讓我交給別人了(可能領導到現在還不知道這個方法的原理,也許以後說起時就是別人的功勞了)。
相關文章
- 自由擴充套件你的專案——Builder模式套件UI模式
- 外掛擴充套件需求_好友套件
- 專案需求討論-Vlayout來快速構建及擴充套件複雜介面套件
- Laravel Bss 專案中用到的第三方擴充套件一,驗證碼擴充套件包Laravel套件
- Laravel Bss 專案中用到的第三方擴充套件二, 圖片裁切擴充套件包Laravel套件
- [外掛擴充套件]外掛需求徵集套件
- 由事務擴充套件開談一談套件
- 如何重構CRM系統,滿足擴充套件的需求套件
- 一次Zookeeper 擴充套件之殤套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- LVM : 擴充套件檔案系統的容量LVM套件
- Canonical公佈Ubuntu 14.04 LTS的擴充套件安全維護專案Ubuntu套件
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- 正則的擴充套件套件
- SRAM的容量擴充套件套件
- PHP擴充套件開發就是一個自己的PHP擴充套件PHP套件
- IT專家暢談:如何啟動和擴充套件成功的AI試點專案套件AI
- 替代MLP的KAN,被開源專案擴充套件到卷積了套件卷積
- [WCF許可權控制]透過擴充套件自行實現服務授權套件
- 開源 [輪子] Laravel 專案架構擴充套件包Laravel架構套件
- 在 Visual Studio 市場中釋出專案擴充套件套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Linux 檔案系統擴充套件Linux套件
- TLS擴充套件的那些事TLS套件
- MySQL InnoDB的索引擴充套件MySql索引套件
- 04.字串的擴充套件字串套件
- Spring IoC 容器的擴充套件Spring套件
- DLR 的擴充套件庫 Dynamitey套件MIT
- 擴充套件你的KUBECTL功能套件
- Solon詳解(六)- Solon的校驗擴充套件框架使用與擴充套件套件框架
- [擴充套件推薦]Aliyun-oss-laravel —— Laravel最好的OSS Storage擴充套件套件Laravel
- 專案中 vscode 外掛擴充套件失效怎麼解決VSCode套件
- 由react效能優化擴充套件出來的bind與閉包的比較(效能)React優化套件
- 由引數URL想到的
- 擴充套件工具套件
- Sanic 擴充套件套件
- Mybatis擴充套件MyBatis套件
- SpringMVC 擴充套件SpringMVC套件
- ORACLE 擴充套件Oracle套件