【发布时间】:2015-10-07 04:42:06
【问题描述】:
我正在使用 C# 创建一个 SQL CLR 过程来在 MongoDB 上执行一些基本操作,例如获取集合的内容、插入文档等。 但我得到 'MongoDB.Bson.Serialization.BsonSerializer' 的类型初始化程序引发了异常。
有什么想法吗??
来自 C# 的完全相同的代码直接可以正常工作。
我正在为 Mongo 1.10 版、.NET Framework 3.5、Microsoft SQL Server 2008 (RTM) 使用 C# 驱动程序。
您可以在下面找到堆栈跟踪的示例:
无法从数据库中删除集合 错误:“MongoDB.Bson.Serialization.BsonSerializer”的类型初始化程序引发异常。在 MongoDB.Bson.Serialization.BsonSerializer.LookupSerializer(类型类型) 在 MongoDB.Driver.MongoDatabase.RunCommandAs[TCommandResult](IMongoCommand 命令) 在 MongoDB.Driver.MongoDatabase.DropCollection(字符串集合名称) 在 Mongo.Test()
从数据库中获取集合 无法从数据库中获取集合 错误:“MongoDB.Bson.Serialization.BsonSerializer”的类型初始化程序引发异常。在 MongoDB.Bson.Serialization.BsonSerializer.LookupSerializer(类型类型) 在 MongoDB.Driver.MongoCollection.RunCommandAs[TCommandResult](IMongoCommand 命令,ReadPreference readPreference) 在 MongoDB.Driver.MongoCollection.Count(CountArgs args) 在 Mongo.Test()
正在将文档插入集合... 未能插入 DB test_blob 的集合 错误:无法连接到服务器 xx.local:27017:“MongoDB.Bson.Serialization.BsonSerializer”的类型初始化程序在 MongoDB.Driver.Internal.DirectMongoServerProxy.Connect(时间跨度超时,ReadPreference readPreference)处引发异常 在 MongoDB.Driver.Internal.DirectMongoServerProxy.ChooseServerInstance(ReadPreference readPreference) 在 MongoDB.Driver.MongoServer.AcquireConnection(ReadPreference readPreference) 在 MongoDB.Driver.MongoCollection.InsertBatch(类型nominalType,IEnumerable 文档,MongoInsertOptions 选项) 在 MongoDB.Driver.MongoCollection.Insert(类型nominalType,对象文档,MongoInsertOptions 选项) 在 MongoDB.Driver.MongoCollection.Insert[TNominalType](TNominalType 文档) 在 Mongo.Test()
【问题讨论】:
-
包含
MongoDB命名空间的程序集是否注册为EXTERNAL_ACCESS或UNSAFE?我相信它在抱怨MongoDB.Bson.Serialization.BsonSerializer的类构造函数中的某些内容,这应该是以static BsonSerializer()开头的方法。该方法发生了什么? -
@srutzky,是的,该程序集不安全。我不知道该方法内部发生了什么,因为该方法来自 MongoDB 的 C# dll 驱动程序。我发现使用支持较新 .NET 框架的较新 sql 版本和最新的 MongoDB 驱动程序 v2.0,上述工作正常。不过,我需要这个才能使用 SQL 2008
-
嗯,.NET 驱动程序是开源的,所以您可以通过这里了解它在做什么:github.com/mongodb/mongo-csharp-driver/tree/master ;-)。我建议在将
TargetFrameworkVersion更改为 .NET 3.5 后获取该源并尝试编译它。如果代码使用了 v4.0 或更高版本中的新内容,那么您应该会收到编译错误,因此您会得到答案;-) -
@srutzky,是的,这是个好主意,但不幸的是,编译错误太多了,无法解决它:P 无论如何,我很可能会寻找其他替代方案,谢谢您的建议
-
我只是再次查看并注意到关于 1.x 系列是最后一个使用 .NET 3.5 的注释。如果您根据我上面发布的链接获取了最新的,那么它就是 2.x 系列。所以试试这个链接,它是最后一个 1.10.x 版本。这里的代码应该编译为目标已经是 .NET 3.5:github.com/mongodb/mongo-csharp-driver/tree/v1.10.0
标签: c# sql-server mongodb sqlclr