C# 关闭Mongo GridFS文件流时出现WriteConcernexException

C# 关闭Mongo GridFS文件流时出现WriteConcernexException,c#,mongodb,mongodb-.net-driver,gridfs,gridfs-stream,C#,Mongodb,Mongodb .net Driver,Gridfs,Gridfs Stream,我在C#中使用MongoDB驱动程序,并使用GridFS存储视频文件。 我像记录流一样连续存储文件,偶尔(可能在编写过程中)我会要求“播放”一个文件。 在某些情况下,在播放文件的这一部分会出现问题: 1.相关的GridFS文件流已打开。 2.数据读取正常。 3.GridFS文件流已关闭->引发WriteConcernexException,详细信息如下: WriteConcern detected an error 'E11000 duplicate key error index: ElSig

我在C#中使用MongoDB驱动程序,并使用GridFS存储视频文件。
我像记录流一样连续存储文件,偶尔(可能在编写过程中)我会要求“播放”一个文件。
在某些情况下,在播放文件的这一部分会出现问题:
1.相关的GridFS文件流已打开。
2.数据读取正常。
3.GridFS文件流已关闭->引发WriteConcernexException,详细信息如下:

WriteConcern detected an error 'E11000 duplicate key error index:
ElSightRecs.fs.chunks.$files_id_1_n_1  dup key: { :
ObjectId('536243c4c449203a24a8f3b2'), : 2656 }'. 
(Response was { "err" : "E11000 duplicate key error index: 
ElSightRecs.fs.chunks.$files_id_1_n_1  dup key: { : 
ObjectId('536243c4c449203a24a8f3b2'), : 2656 }", "code" : 11000, "n" : 0,
"connectionId" : 1111, "ok" : 1.0 }).
`


为什么我在关闭文件流时会出现写入错误?

嗯,我不确定这是否是MongoDB驱动程序中的错误,但我发现了问题。
我用
OpenRead()
打开了GridFS文件,因此我认为我得到了很好的保护。显然不是。
我有一个bug,称为Seek,位置高于文件长度。这导致了关闭问题…

不知道为什么,不知道是谁。。。但是也许其他人可以使用这个技巧:)

@RoeeK,关闭连接可能是seek超出文件长度的行为

然而,我担心你会犯错误。你能用一些较小的示例代码重新生成它吗?如果是的话,请分享一下


在您的错误片段中,您是否正在读取/执行id为“536243C449203A24A8F3B2”的文件?

是的,我能够重现。它是这样的:我从GridFS(使用OpenRead)打开一个文件,并寻找一个比文件长度更高的值。然后当我关闭文件时,它没有响应。由于此操作是在后台任务上完成的,因此用户尝试再次执行此操作(因为流被卡住)。当他再次尝试时,我得到了这个错误(流不能在第一个任务中关闭,所以它实际上打开了两次)