我有一个MVC4网站,我正在尝试集成一些Mongodb功能(现在只是试验)。我正在使用此mongodb project,因为我也尝试部署到Azure,此项目提供连接到mongodb worker角色的连接实用程序。我有一个带有以下构造函数的MovieController:
public class MovieController : Controller
{
MongoMovieHelper _movies;
public MovieController()
{
_movies = new MongoMovieHelper();
}
}
这又调用了这个类:
public class MongoMovieHelper
{
public MongoCollection<Movie> Collection { get; private set; }
public MongoMovieHelper()
{
MongoServerSettings serverSettings = ConnectionUtilities.GetConnectionSettings();
MongoServer server = MongoServer.Create(serverSettings);
MongoDatabase db = server["movies"];
Collection = db.GetCollection<Movie>(typeof(Movie).Name.ToLower());
}
...
尝试从影片控制器加载任何页面时,我在Chrome调试器中收到内部服务器错误。
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
所以我尝试在visual studio中进行调试。控制器构造函数被命中,但MongoMovieHelper中的任何断点都没有,并且尝试Step into再次点击控制器构造函数。堆栈跟踪显示以下错误:
无法加载文件或程序集'MongoDB.Driver,Version = 1.4.2.4500, Culture = neutral,PublicKeyToken = f686731cfb9cc103'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT异常:0x80131040)
之前我有另一个使Mongodb连接的类,所以Controller调用MongoMovieHelper调用MongoDBHelper。在这种情况下,控制器和MongoMovieHelper都被调用,但MongoDBHelper不是,所以我认为问题在于mongodb连接。
这可能是一些新手的错误,但我无法弄清楚问题可能是什么,有什么想法吗?
答案 0 :(得分:0)
我尝试使用官方mongodb c#驱动程序的最新版本重新创建您的问题,但我不能。
我正在使用NuGet上提供的最新官方驱动程序:
我更改了您的代码以使用非过时的方法来获取服务器对象:
public MongoMovieHelper()
{
var client = new MongoClient(MongoUrl.Create("mongodb://localhost:27017"));
var server = client.GetServer();
var db = server["movies"];
Collection = db.GetCollection<Movie>(typeof (Movie).Name.ToLower());
}
因此,如果您没有使用官方驱动程序,请使用它:
使用以下命令:
Install-Package mongocsharpdriver
然后尝试将代码更改为类似我的代码,然后查看它是否有效。
您获得的错误表明您要么使用旧版本的官方驱动程序,要么根本不使用官方驱动程序。
注意:通过nuget控制台(/ ui)卸载旧驱动程序,或者删除二进制引用并清理项目,确保您没有任何bin dll。