【问题标题】:.Net Connection to Bolt URI failing with Neo4jClient but not Neo4j.Driver.Net 连接到 Bolt URI 失败,Neo4jClient 但不是 Neo4j.Driver
【发布时间】:2020-04-05 19:50:46
【问题描述】:

我一直在将 Docker 容器中的 .Net Core 代码连接到 Neo4j 数据库。我首先尝试使用 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。 As per instructions here at Neo4j

下面使用 Neo4j.Driver 的代码直接工作并更新了 12 个组织的数据库。 它在 .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 而中断:失败 与服务器建立加密连接 螺栓://本地主机:7687/。
  2. IOException:身份验证失败,因为 对方已关闭传输流。

Neo4j 日志中不显示任何内容。我在支持 SSL 的 .Net Core API 代码中没有任何特定代码,并且谷歌搜索第二个异常会返回许多不正确的 TLS 结果。所以正在探索。

【问题讨论】:

  • 您使用的是什么版本的客户端/驱动程序?什么版本的数据库?
  • 应该提供道歉。 -- Neo4j 4.0.3 -- Neo4jClient 3.1.0.6 -- Docker 引擎 19.03.8 -- .Net Core 3.1.101
  • 我现在不在电脑旁,但是你能不能尝试在客户端上打开加密并试一试,我不确定语法,我会说的当我到达时正确地

标签: c# docker neo4j neo4jclient bolt


【解决方案1】:

4.x 版本的 Neo4j 需要设置 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 证书设置

【讨论】:

  • 经过大量谷歌搜索,这终于奏效了。甚至 Neo4J 的示例 hello world 应用程序也不适用于本地 neo4j 实例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 2021-08-03
  • 1970-01-01
  • 2014-12-19
  • 2016-01-29
相关资源
最近更新 更多