已为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.
我不明白为什么服务器要关闭连接
3条答案
按热度按时间tjvv9vkg1#
在你第一次调用
Next()
之后,v1
对象现在是一个结果。graph
是实际的GraphTraversalSource,还是你从它派生出来的东西?如果是后者,在调用Next
之后,它已经完成,你必须再次创建它。一般来说,最好让填充v1和v2的前两个调用返回它们的ID,甚至更好的是,将所有这些作为一个查询来完成,下面我将给出这两个调用的示例。
或者,更清洁,
我还假设
graph
是一个GraphTraversalSource
对象(通常称为g
,而不是从g
派生的某个对象的实际Graph
对象)。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的响应中获取代码,因为它使用单次遍历):
你必须这样做:
一般情况下,请检查the official Cosmos DB docs或this example repository for Cosmos DB and Gremlin.Net。
uqcuzwp83#
我在更新Gremlin Nuget package后得到了这个错误。在添加到这个Quick Start Issue后,我发现compatibility chart声明支持版本3.4.13。3.4.13于2022年1月13日发布。在我把Nuget放回3.4.13后,连接异常消失了。
这让我想知道为什么微软还没有更新,以能够支持新版本。它已经13个月的时候,我写这篇文章。