You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gremlin.Net调用AWS Neptune时遇“Message with op code [close] is not recognized”错误

问题分析与解决

你的代码确实存在问题——不该把GraphTraversal实例放在using块中。

问题根源

query.Project<string>("resourceId")返回的是GraphTraversal对象,它虽然实现了IDisposable接口,但这个Dispose方法是用来清理本地遍历的临时资源,而非关闭和Neptune的连接。当代码离开using块时,会自动调用Dispose(),此时Gremlin.Net会尝试向Neptune服务器发送一个close操作码,但AWS Neptune的Gremlin端点并不支持这个操作,所以触发了"Message with op code [close] is not recognized"错误。

修正后的代码

直接移除using块即可,因为Promise(x => x.ToList())执行完成后,请求相关的资源已经被正确处理:

var query = graph.V().Values<string>("resourceId").Dedup();
var uniqueResourceIds = query.Project<string>("resourceId");
var queryResult = await uniqueResourceIds.Promise(x => x.ToList());

补充说明

如果需要管理Gremlin连接的生命周期,应该操作的是GraphClient或Cluster实例(如果你用的是Cluster模式),而不是单个的GraphTraversal对象。这些顶层的客户端/集群对象才是需要用using块来释放连接资源的正确对象。

内容的提问来源于stack exchange,提问作者S7H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 00:37:02