最近在推廣應用我們的分布式服務網(wǎng)關(Web Api):業(yè)務組大部分對外的業(yè)務邏輯以HSF服務或者自定義擴展插件的方式,注冊并發(fā)布到分布式服務網(wǎng)關中,統(tǒng)一對外提供WebApi服務。臨時介紹下我們的分布式服務網(wǎng)關:

1. 一鍵注冊、發(fā)布WebApi服務,

2. 統(tǒng)一管理發(fā)布WebApi服務,實現(xiàn)WebApi的服務化治理

3. 集成安全認證、加解密、監(jiān)控、日志等Aspect

4. 流量安全控制:流控

5. 橫向伸縮、彈性擴展,支持大規(guī)模并發(fā) 

6. 簡化WebApi開發(fā),提升開發(fā)效率,減少重復開發(fā)工作

在實際的開發(fā)應用中,業(yè)務邏輯dll要注冊、發(fā)布到分布式服務網(wǎng)關中,例如參數(shù)類型、自定義擴展插件等。

每次業(yè)務的變更,都需要重新發(fā)布服務,例如實體類的注解(屬性標簽)發(fā)生變化,重新發(fā)布服務,分布式服務網(wǎng)關偵測到變化,重新加載。

同時,各個業(yè)務模塊之間存在SPI層接口、實體類的依賴,例如:A中依賴B.Spi.dll, B發(fā)布了最新的B.Spi.dll, A未發(fā)布,這樣會產(chǎn)生一個問題:

一個AppDomain中只能加載一個B.Spi.dll,如果先訪問A服務,那么舊版本的B.Spi.dll就會先加載到AppDomain,此時,訪問B服務時,就會出現(xiàn)dll沖突問題:

例如:

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

{:

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

類似的錯誤還有:

 未能加載文件或程序集“***.dll”或它的某一個依賴項

運行時如何快速定位到dll 沖突的根本原因,找到到底加載的dll是在GAC中、還是Bin中、還是指定目錄中的dll?

有經(jīng)驗的老司機,分享給大家一個三步法,屢試不爽?。。?/p>

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,  右鍵創(chuàng)建轉儲文件

大數(shù)據(jù)培訓,云培訓,數(shù)據(jù)挖掘培訓,云計算培訓,高端軟件開發(fā)培訓,項目經(jīng)理培訓

2. 安裝Windbg, 請根據(jù)程序的32/64版本下載安