neo4jneo4j-aura

Connecting to Neo4j Aura with .NET Core 2.2 web api


I am trying to connect a to Neo4j Aura instance from a .NET core 2.2 web api. I understand I need the Neo4j .Net Driver v4.0.0-alpha01, but I do not seem to be able to connect. There aren't very many examples out there as this driver is new and so is Aura.

I keep getting: Failed after retried for 6 times in 30000 ms. Make sure that your database is online and retry again.

I configure the driver as such

public void ConfigureServices(IServiceCollection services)
{
   string uri = "neo4j://1234567.databases.neo4j.io:7687";//not actual subdomain
   string username = "neo4j";
   string password = "seeeeeeecret";//not actual password

   services.AddCors();
   services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
   services.AddSingleton(GraphDatabase.Driver(uri, AuthTokens.Basic(username, password)));
}

and in my test controller i run this

private async Task<string> Neo4JTestAsync()
        {
            string db = "MyDb";
            string message = "TESTMESSAGE";

            IAsyncSession session = _driver.AsyncSession(o => o.WithDatabase(db));
            try
            {
                var greeting = session.WriteTransactionAsync(async tx =>
                {
                    var result = tx.RunAsync("CREATE (a:Greeting) " +
                                        "SET a.message = $message " +
                                        "RETURN a.message + ', from node ' + id(a)",
                        new { message });
                    var res = await result;
                    return "return something eventually";
                });
                return await greeting;
            }
            catch (Exception e)
            {
                return e.Message; // throws "Failed after retried for 6 times in 30000 ms. Make sure that your database is online and retry again"
            }
            finally
            {
                await session.CloseAsync();
            }
        }

Solution

  • I can't get the exact error message you do - but I'm pretty sure this is due to encryption - one of the big differences between the 1.x and 4.x drivers is the default position on Encryption - which is now off by default.

    So you'll want to change your initialisation to:

     services.AddSingleton(GraphDatabase.Driver(uri, AuthTokens.Basic(username, password), config => config.WithEncryptionLevel(EncryptionLevel.Encrypted)));
    

    That should get you going. Also - make sure you stick with the neo4j:// protocol, as that'll route you properly.