.net 驱动程序异常连接关闭异常

vshtjzan  于 2023-03-04  发布在  .NET
关注(0)|答案(3)|浏览(165)

已为gremlinServer、connectionPoolSettings创建对象

var gremlinClient = new GremlinClient(gremlinServer,connectionPoolSettings:connectionPoolSettings);

    using (gremlinClient)
    {
      var v1 = graph.AddV("person").Property("name", "marko").Next();**
      var v2 = graph.AddV("person").Property("name", "stephen").Next();
      graph.V(v1).AddE("knows").To(v2).Property("weight", 0.75).Iterate();
    }

变量V1出现以下异常:

Gremlin.Net.Driver.Exceptions.ConnectionClosedException: 'Connection closed by server. CloseStatus: InternalServerError, CloseDescription: Internal-Server-Error. Any in-progress requests on the connection will be in an unknown state, and may need to be retried.

我不明白为什么服务器要关闭连接

tjvv9vkg

tjvv9vkg1#

在你第一次调用Next()之后,v1对象现在是一个结果。graph是实际的GraphTraversalSource,还是你从它派生出来的东西?如果是后者,在调用Next之后,它已经完成,你必须再次创建它。
一般来说,最好让填充v1和v2的前两个调用返回它们的ID,甚至更好的是,将所有这些作为一个查询来完成,下面我将给出这两个调用的示例。

var v1 = graph.AddV("person").Property("name", "marko").Id().Next();
 var v2 = graph.AddV("person").Property("name", "stephen")).Id().Next();
 graph.V(v1).AddE("knows").To(V(v2)).Property("weight", 0.75).Iterate();
}

或者,更清洁,

graph.AddV("person").Property("name", "marko").As("a").
       AddV("person").Property("name", "stephen")).
       AddE("knows").From("a").Property("weight", 0.75).
       Iterate();
}

我还假设graph是一个GraphTraversalSource对象(通常称为g,而不是从g派生的某个对象的实际Graph对象)。

qkf9rpyu

qkf9rpyu2#

既然你用Cosmos DB标记了这个问题,我假设你使用的是那个后端。不幸的是,它不支持任何更新于3.4.13的Gremlin.Net版本,但你在评论中提到你使用的是Gremlin.Net 3.6.1,它现在不能与Cosmos DB一起工作。
除了版本之外,Cosmos DB也不支持Gremlin Bytecode,当你在C#中创建遍历然后迭代它们时,内部使用Gremlin Bytecode。使用Cosmos DB,你必须将它们作为字符串发送,就像你发送SQL查询字符串一样。
因此,与此不同(我从kelvin-lawrence的响应中获取代码,因为它使用单次遍历):

graph.AddV("person").Property("name", "marko").As("a").
       AddV("person").Property("name", "stephen")).
       AddE("knows").From("a").Property("weight", 0.75).
       Iterate();

你必须这样做:

var query =  "g.addV('person').property('name', 'marko').as('a').
       addV('person').property('name', 'stephen')).
       addE('knows').from('a').property('weight', 0.75).
       iterate()";
await gremlinClient.SubmitAsync<object>(query);

一般情况下,请检查the official Cosmos DB docsthis example repository for Cosmos DB and Gremlin.Net

uqcuzwp8

uqcuzwp83#

我在更新Gremlin Nuget package后得到了这个错误。在添加到这个Quick Start Issue后,我发现compatibility chart声明支持版本3.4.13。3.4.13于2022年1月13日发布。在我把Nuget放回3.4.13后,连接异常消失了。
这让我想知道为什么微软还没有更新,以能够支持新版本。它已经13个月的时候,我写这篇文章。

相关问题