1. 程式人生 > 實用技巧 >關於 identityserver4 接入 skywalking System.Data.SqlClient 報錯

關於 identityserver4 接入 skywalking System.Data.SqlClient 報錯

環境

  1. identityserver4 3.1.4
  2. skywalking 8.1.0
  3. asp.net core 3.1.8
  4. efcore 3.1.8
  5. skyapm-net 1.0.0

背景

skywalking是什麼就不介紹了,百度很多。.net core接入也非常簡單:SkyAPM-dotnet

// 1. 新增包
<PackageReference Include="SkyAPM.Agent.AspNetCore" Version="1.0.0" />
// 2. 新增配置檔案
"SkyWalking": {
    "ServiceName": "IdentityServer",
    "Namespace": "Infrastructure",
    "HeaderVersions": [
      "sw8"
    ],
    "Logging": {
      "Level": "Information",
      "FilePath": "logs\\skyapm-{Date}.log"
    },
    "Transport": {
      "Interval": 3000,
      // 8.1.0 是 v8
      "ProtocolVersion": "v8",
      "QueueSize": 30000,
      "BatchSize": 3000,
      "gRPC": {
        // 使用環境變數替換
        // "Servers": "192.168.0.230:11800",
        "Timeout": 10000,
        "ConnectTimeout": 10000,
        "ReportTimeout": 600000,
        "Authentication": ""
      }
    }
  }
// 3. 新增環境變數
ASPNETCORE_HOSTINGSTARTUPASSEMBLIES="SkyAPM.Agent.AspNetCore"

公司用identityserver4做單點登入和令牌的頒發。於是想用skywalking觀察一下identityserver4服務的響應情況。
接入還是那麼順滑。。。
提交程式碼 -> merge 程式碼 -> 自動打包映象上傳倉庫 -> 部署 一氣呵成,簡直不要太完美,準備收拾收拾下班回家。

問題

然而事情並沒有想象中那麼簡單,啟動報錯。。。assmbly System.Data.SqlClient 4.6.1 not found what???

解決之路

Round 1

好吧,很簡單嘛,安裝一下SqlClient 4.6.1不就好了,提交程式碼 -> merge 程式碼 -> 自動打包映象上傳倉庫 -> 部署 一氣呵成,簡直不要太完美,第二次準備下班回家。。。
果然是事情並沒有那麼簡單。。。依然報錯。。。

Round 2

那隻能是identityserver4 與 skyapm-net 的依賴包衝突了,專案中用的efcore版本為3.1.8,看了下skyapm-net好像是用的3.1.0
難道是這個版本的問題,果斷降級。。。提交程式碼 -> merge 程式碼 -> 自動打包映象上傳倉庫 -> 部署 一氣呵成,簡直不要太完美,又一次準備下班回家。。。
果然不是efcore版本的問題。。。

Round 3

我專案中也沒顯式的指定SqlClient用4.6.1,看了下skyapm-net發現它引用的SqlClient版本為4.8.0,那這4.6.1是什麼鬼???
不管了那專案中顯式引用一下SqlClient4.8.0,保持跟skyapm-net一樣總沒問題了嘛,提交程式碼 -> merge 程式碼 -> 自動打包映象上傳倉庫 -> 部署 忐忑等待結果。。。
果然成功了。。。what???好吧,解決了就好,不求甚解。。。又已經下班一個小時了,下班回家。

後記

還是沒找到是什麼原因,不知道到底是哪兒衝突了,找不到問題所在,不如把鍋拋給.net core吧,是不是它還是不夠成熟,這個情況是不是應該編譯時期就應該暴露出來,或者說在安裝依賴的時候就應該提示,emmm....對的就是.net的問題。