我一直在将 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 个组织的数据库。它在 .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);
例外情况是:
- 由于 SecurityException,与服务器的连接中断:无法与服务器 bolt://localhost:7687/ 建立加密连接。
- IOException:身份验证失败,因为远程方已关闭传输流。
Neo4j 日志中没有出现任何内容。我在支持 SSL 的 .Net Core API 代码中没有任何特定代码,并且谷歌搜索第二个异常会返回很多不正确的 TLS 结果。所以我正在探索。