最近在推廣應用我們的分布式服務閘道器(web api):業務組大部分對外的業務邏輯以hsf服務或者自定義擴充套件外掛程式的方式,註冊並發布到分布式服務閘道器中,統一對外提供webapi服務。臨時介紹下我們的分布式服務閘道器:
1. 一鍵註冊、發布webapi服務,
2. 統一管理發布webapi服務,實現webapi的服務化治理
3. 整合安全認證、加解密、監控、日誌等aspect
4. 流量安全控制:流控
5. 橫向伸縮、彈性擴充套件,支援大規模併發
6. 簡化webapi開發,提公升開發效率,減少重複開發工作
在實際的開發應用中,業務邏輯dll要註冊、發布到分布式服務閘道器中,例如引數型別、自定義擴充套件外掛程式等。
同時,各個業務模組之間存在spi層介面、實體類的依賴,例如:a中依賴b.spi.dll, b發布了最新的b.spi.dll, a未發布,這樣會產生乙個問題:
例如:
{"類似的錯誤還有:errorinfo
":"資料序列化錯誤:程式集「***.module.carmdelanalyse.spi, version=1.0.0.0, culture=neutral,
publickeytoken=null」中的型別「***.module.carmdelanalyse.spi.carmodelanalyseresult」未標記為可序列化。r\rn
在 system.runtime.serialization.formatterservices.internalgetserializablemembers(runtimetype type)\r\n
在 system.runtime.serialization.formatterservices.getserializablemembers(type type, streamingcontext context)\r\n
在 system.runtime.serialization.formatters.binary.writeobjectinfo.initmemberinfo()\r\n
在 system.runtime.serialization.formatters.binary.writeobjectinfo.initserialize(object obj, isurrogateselector surrogateselector,
streamingcontext context, serobjectinfoinit serobjectinfoinit, iformatterconverter converter, objectwriter objectwriter,
serializationbinder binder)\r\n 在 system.runtime.serialization.formatters.binary.objectwriter.write(writeobjectinfo objectinfo,
nameinfo membernameinfo, nameinfo typenameinfo)\r\n 在 system.runtime.serialization.formatters.binary.objectwriter.serialize(object graph,
header inheaders, __binarywriter serwriter, boolean fcheck)\r\n
在 system.runtime.serialization.formatters.binary.binaryformatter.serialize(stream serializationstream, object graph, header headers,
boolean fcheck)\r\n 在 system.runtime.serialization.formatters.binary.binaryformatter.serialize(stream serializationstream, object graph)\r\n
未能載入檔案或程式集「***.dll」或它的某乙個依賴項
執行時如何快速定位到dll 衝突的根本原因,找到到底載入的dll是在gac中、還是bin中、還是指定目錄中的dll?
有經驗的老司機,分享給大家乙個三步法,屢試不爽!!!
1. 找到程式主程序,右鍵:create dump file,如果iis站點:指定應用程式池下的w3wp程序,如果自己的服務程序,直接找程序即可
2. 安裝指定版本的windbg(x86\x64), ctrl+d 載入第一步抓的dump檔案,.loadby sos clr -> !dumpdomain
3. 找到相關的dll檔案路徑,ilspy,反編譯定位問題,解決。
show:
1. 抓dump:通過上面的錯誤堆疊,我們定位到w3wp.exe, 右鍵建立轉儲檔案
依次輸入命令:.loadby sos clr -> !dumpdomain
得到domain資訊輸出:
以servicestack.redis.dll這個dll為例,可以找到在哪個路徑下載入的dll:類似的找業務相關的dll即可:
windbg的確在記憶體映象分析時是乙個利器,贊乙個!
周國慶2017/4/23
動態規劃 三步問題
有個小孩正在上樓梯,樓梯有n階台階,小孩一次可以上1階 2階或者3階。實現一種方法,計算小孩有多少種上樓梯的方式。當n比較大時 比如n 1000000 結果會很大,要求對結果進行模1000000007操作。n 1時,結果為1 n 2時,結果為2 2 1 1 n 3時,結果為4 3 2 1 1 2 1...
解決同名dll衝突的問題
問題描述 軟體同時整合兩種ipc的sdk時,遇到dll同名的情況,因此在呼叫時會出現衝突的情況。解決方法如下 採用動態載入dll庫的方法。include common.h include iostream include tchar.h include windows.h using namespa...
SSH 三步解決免密登入
本地客戶端生成公私鑰 一路回車預設即可 ssh keygen上面這個命令會在使用者目錄.ssh資料夾下建立公私鑰 cd sshls下建立兩個金鑰 id rsa 私鑰 id rsa.pub 公鑰 ssh copy id i ssh id rsa.pub root 192.168.235.22上面這條命...