在 30000 毫秒内重试 6 次后失败。确保您的数据库在线并重试
Failed after retried for 6 times in 30000 ms. Make sure that your database is online and retry again
我正在尝试使用 Neo4j 的 .NET 驱动程序从我的 C# 代码连接到 Neo4j 数据库。我的 C# 桌面应用程序和 Neo4j 运行 在单独的 docker 容器上,通过 docker-compose 编排。提交查询时,驱动程序抛出异常并显示以下消息。
Exception thrown: 'Neo4j.Driver.ServiceUnavailableException' in System.Private.CoreLib.dll
Exception is thrown: 'System.AggregateException' in System.Private.CoreLib.dll
One or more errors occurred. (Failed after retried for 6 times in 30000 ms. Make sure that your database is online and retry again.)
docker-compose.yml
:
version: '3.8'
services:
myConsoleApp:
image: ${DOCKER_REGISTRY-}myConsoleApp
build:
context: .
dockerfile: MyConsoleApp/Dockerfile
neo4j:
image: neo4j:latest
network_mode: "bridge"
ports:
- "7474:7474" # HTTP
- "7687:7687" # Bolt
environment:
- NEO4J_dbms_security_procedures_unrestricted=apoc.*
- NEO4J_apoc_import_file_enabled=true
- NEO4J_dbms_shell_enabled=true
- NEO4J_dbms_memory_pagecache_size=1G
- NEO4J_dbms.memory.heap.initial_size=1G
- NEO4J_dbms_memory_heap_max__size=1G
- NEO4J_AUTH=neo4j/password
volumes:
- ./plugins:/plugins
- ./data:/data
- ./import:/import
我在 C# 控制台应用程序中访问它的方式:
var driver = GraphDatabase.Driver(
"bolt://localhost:7687",
AuthTokens.Basic("neo4j", "password"));
using (var session = driver.AsyncSession())
{
var x = session.WriteTransactionAsync(async tx =>
{
var result = await tx.RunAsync(
"CREATE (a:Person:Employee)");
});
await x;
}
等待x
时抛出异常。
我可以通过上面的设置确认,Neo4j 容器已经启动并正确地监听了 HTTP 端口,至少因为我可以通过 http://localhost:7474/browser/
访问它。所以,我怀疑我从驱动程序中遗漏了一些东西。
您的控制台应用程序似乎正在使用“bolt://localhost:7687”,但这是 运行 在容器中,因此 localhost 将引用容器的本地主机。
我认为您会想要使用 neo4j 服务名称而不是 localhost。
螺栓://neo4j:7687
我正在尝试使用 Neo4j 的 .NET 驱动程序从我的 C# 代码连接到 Neo4j 数据库。我的 C# 桌面应用程序和 Neo4j 运行 在单独的 docker 容器上,通过 docker-compose 编排。提交查询时,驱动程序抛出异常并显示以下消息。
Exception thrown: 'Neo4j.Driver.ServiceUnavailableException' in System.Private.CoreLib.dll Exception is thrown: 'System.AggregateException' in System.Private.CoreLib.dll One or more errors occurred. (Failed after retried for 6 times in 30000 ms. Make sure that your database is online and retry again.)
docker-compose.yml
:
version: '3.8'
services:
myConsoleApp:
image: ${DOCKER_REGISTRY-}myConsoleApp
build:
context: .
dockerfile: MyConsoleApp/Dockerfile
neo4j:
image: neo4j:latest
network_mode: "bridge"
ports:
- "7474:7474" # HTTP
- "7687:7687" # Bolt
environment:
- NEO4J_dbms_security_procedures_unrestricted=apoc.*
- NEO4J_apoc_import_file_enabled=true
- NEO4J_dbms_shell_enabled=true
- NEO4J_dbms_memory_pagecache_size=1G
- NEO4J_dbms.memory.heap.initial_size=1G
- NEO4J_dbms_memory_heap_max__size=1G
- NEO4J_AUTH=neo4j/password
volumes:
- ./plugins:/plugins
- ./data:/data
- ./import:/import
我在 C# 控制台应用程序中访问它的方式:
var driver = GraphDatabase.Driver(
"bolt://localhost:7687",
AuthTokens.Basic("neo4j", "password"));
using (var session = driver.AsyncSession())
{
var x = session.WriteTransactionAsync(async tx =>
{
var result = await tx.RunAsync(
"CREATE (a:Person:Employee)");
});
await x;
}
等待x
时抛出异常。
我可以通过上面的设置确认,Neo4j 容器已经启动并正确地监听了 HTTP 端口,至少因为我可以通过 http://localhost:7474/browser/
访问它。所以,我怀疑我从驱动程序中遗漏了一些东西。
您的控制台应用程序似乎正在使用“bolt://localhost:7687”,但这是 运行 在容器中,因此 localhost 将引用容器的本地主机。 我认为您会想要使用 neo4j 服务名称而不是 localhost。 螺栓://neo4j:7687