Tips:本篇已加入系列文章閱讀目錄,可點擊查看更多相關文章,
目錄- 前言
- 開始
- 模塊運行
- 動態 C# API 客戶端
- 最后
前言
很久沒更新這個系列,,,之前的章節中講到ABP的模塊是可以獨立運行的,但是沒有介紹具體怎么操作,本篇就來討論一下模塊如何獨立運行,以及一些托管方式,本人也是處于摸索階段,如有不對歡迎指出,
開始
模塊運行
首先需要生成模塊的資料庫,修改HttpApi.Host和IdentityServer專案的appsettings.json資料庫連接字串配置,

\modules\file-management\host\Xhznl.FileManagement.HttpApi.Host\appsettings.json:

\modules\file-management\host\Xhznl.FileManagement.IdentityServer\appsettings.json:

這樣會生成2個資料庫,如果你只需要一個資料庫的話,就把FileManagement的那行配置去掉就好了,
打開程式包管理器控制臺,默認專案選擇IdentityServer,執行update-database

執行完成會生成Main資料庫,其中是一些ABP的基礎表,

繼續將默認專案設定為HttpApi.Host執行add-migration Initial update-database

執行完成會生成Module資料庫,其中是你模塊的相關表,

此時這兩個專案就可以正常運行了,


專案中可能有多個模塊相互協作,如果將各個模塊獨立運行的話,不可能每個模塊都創建一個Main資料庫,所以部分ABP的通用模塊的資料庫表就用同一個就好了,
\modules\file-management\host\Xhznl.FileManagement.HttpApi.Host\appsettings.json:

\modules\file-management\host\Xhznl.FileManagement.IdentityServer\appsettings.json:

動態 C# API 客戶端
當有多個獨立部署的模塊時,可能需要做一些網關之類的來統一入口,模塊之間的相互呼叫也比較麻煩,本篇暫不討論,下面介紹一下如何使用ABP的動態C# API客戶端來呼叫遠程模塊,
ABP可以自動創建C# API 客戶端代理來呼叫遠程HTTP服務(REST APIS).通過這種方式,你不需要通過
HttpClient或者其他低級的HTTP功能呼叫遠程服務并獲取資料.
前面的章節中,在主專案中將模塊的Application層和Domain層的大部分專案都參考了一遍,那種方式是單體部署的情況,模塊和主專案托管在同一個行程里,
下面使用C# API客戶端來代理遠程模塊,
首先洗掉專案中模塊的參考和DependsOn

然后在你需要呼叫模塊的專案中,添加模塊的HttpApi.Client專案的依賴即可,比如我這里的Xhznl.HelloAbp.HttpApi.Host專案:

然后DependsOn:

然后在appsettings.json中添加遠程服務的地址配置:

其中的FileManagement這個名稱是來自模塊的HttpApi.Client專案中的定義:

接下來就可以像使用本地方法一樣去使用遠程服務了,因為HttpApi.Client是依賴于Application.Contracts專案的,所以你模塊的所有服務介面都可以在這里使用,直接注入即可(前提是你的服務需要實作IRemoteService),ABP會自動幫你完成Http的遠程呼叫,隨便找個地方測驗一下:

接下來是模塊專案,最好配合ABP的自動API控制器一起使用,如果你是自定義路由的話,可能會出現一些Could not found remote action的奇怪錯誤,

Auth服務地址也注意一下:

下面給兩個專案打上斷點,測驗一下流程是否正確:


可以看到,請求已經正常流轉到模塊專案中,
上面有些亂,總結一下重點:
- 添加
HttpApi.Client參考 - 添加
RemoteServices地址配置 - 注入服務介面進行使用
如果想托管模塊的所有API,那么只需要再添加模塊的HttpApi依賴即可,托管方式非常靈活,具體可以參考:模塊化架構最佳實踐 & 約定
最后
本篇就到這里,,,,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/195859.html
標籤:.NET技术
上一篇:abp(net core)+easyui+efcore實作倉儲管理系統——出庫管理之四(五十三)
下一篇:C# 類的成員
