簡體   English   中英

.Net 與 Bolt URI 的連接因 Neo4jClient 而失敗,但不是 Neo4j.Driver

[英].Net Connection to Bolt URI failing with Neo4jClient but not Neo4j.Driver

我一直在將 Docker 容器中的 .Net Core 代碼連接到 Neo4j DB。 我首先嘗試使用 Neo4jClient,但遇到了 docker 容器外的 http 連接問題。 然后,我使用 host.docker.internal 到別名 localhost 直接使用螺栓連接嘗試了 Neo4j.Driver。 這工作得很好。 我用bolt(再次從Docker內部)換回了Neo4jClient,但它失敗了。 謝謝你的幫助。

Neo4j.Driver.V1.ServiceUnavailableException
  HResult=0x80131500
  Message=Connection with the server breaks due to SecurityException: Failed to establish encrypted connection with server bolt://host.docker.internal:7687/.
  Source=Neo4j.Driver

更新:在下面 Chris Skardon 的幫助下。 我按照示例 11.2 為螺栓打開了 ssl。 啟用螺栓 SSL。 按照 Neo4j 處的說明

下面的代碼使用 Neo4j.Driver 直接工作並使用 12 個組織更新數據庫。 它在 a.Net Core Docker 容器中運行,並使用 host.docker.internal。 如果沒有加密配置,我本來希望這不會起作用。 但確實如此。

IDriver driver = GraphDatabase.Driver("bolt://host.docker.internal:7687", AuthTokens.Basic("neo4j", "xxxxx"));
IAsyncSession session = driver.AsyncSession(o => o.WithDatabase("neo4j"));

此代碼使用 Neo4jClient 不起作用。 我最初是在上面的 docker 容器中運行它,並認為可能就是這樣。 但是還是有沒有容器的問題

IDriver driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.Basic("neo4j", "xxxxx"), Config.Builder.WithEncryptionLevel(EncryptionLevel.Encrypted).ToConfig());
            var client = new BoltGraphClient(driver);

例外情況是:

  1. 由於 SecurityException,與服務器的連接中斷:無法與服務器 bolt://localhost:7687/ 建立加密連接。
  2. IOException:身份驗證失敗,因為遠程方已關閉傳輸 stream。

Neo4j 日志中沒有出現任何內容。 我在 .Net Core API 代碼中沒有任何特定代碼來支持 SSL 和谷歌搜索第二個異常時返回了很多不正確的 TLS 結果。 所以我正在探索。

Neo4j 的4.x版本需要設置 Encryption, Neo4jClient實際上並沒有提供簡單的方法來執行此操作,因此您需要傳入IDriver實例,如下所示:

var driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.Basic("neo4j", "neo"), Config.Builder.WithEncryptionLevel(EncryptionLevel.None).ToConfig());
var client = new BoltGraphClient(driver);

編輯

我一直在對此進行測試-問題實際上是相反的-您需要將加密級別設置為“無”-除非您實際上擁有 SSL 證書設置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM