首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KeyNotFoundException与RavenDb

KeyNotFoundException与RavenDb
EN

Stack Overflow用户
提问于 2015-01-20 22:06:52
回答 1查看 473关注 0票数 2

刚刚安装了RavenDb Build-3528作为一个网站在IIS中。

RavenDb运行得很好,可以在http://localhost:8080上访问management,创建数据库等等,到目前为止没有问题。

然而,当我启动MVC 5应用程序(使用常规的MVC控制器和WebApi控制器)时,应用程序在启动时就会崩溃,并带有json消息:

代码语言:javascript
复制
{
    message: "An error has occurred.",
    exceptionMessage: "The given key was not present in the dictionary.",
    exceptionType: "System.Collections.Generic.KeyNotFoundException",
    stackTrace: " at System.Collections.Concurrent.ConcurrentDictionary`2.get_Item(TKey key) at Raven.Database.Server.Controllers.RavenBaseApiController.InnerInitialization(HttpControllerContext controllerContext) in c:\Builds\RavenDB-Stable-3.0\Raven.Database\Server\Controllers\RavenBaseApiController.cs:line 101 at Raven.Database.Server.Controllers.RavenDbApiController.InnerInitialization(HttpControllerContext controllerContext) in c:\Builds\RavenDB-Stable-3.0\Raven.Database\Server\Controllers\RavenDbApiController.cs:line 112 at Raven.Database.Server.Controllers.RavenDbApiController.<ExecuteAsync>d__3a.MoveNext() in c:\Builds\RavenDB-Stable-3.0\Raven.Database\Server\Controllers\RavenDbApiController.cs:line 54 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
}

有趣的是:在IIS中将RavenDb作为网站安装之前,我们在RavenDb应用程序中使用了RavenDb 2.5作为嵌入式服务器,并且工作得很好。

在Windows事件管理器中,我找不到任何有用的信息。

有人知道怎么回事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-21 06:02:22

哈哈!

结果表明,如果在WebApiConfig.cs中注释掉以下行,则错误将消失:

代码语言:javascript
复制
// Web API routes
config.MapHttpAttributeRoutes();  // <--- Offending line

显然RavenDB也打电话给MapHttpAttributeRoutes()所以有冲突..。

当然,注释掉该行意味着WebApi路由不再工作,引发Multiple actions were found that match the request错误。

更新

在我的解决方案中,有一个带有单元测试的项目需要Raven.Database.dll,因为它使用EmbeddableDocumentStore在内存中运行测试。

这个Raven.Database.dll以MVC/WebApi项目的bin文件夹结束。一旦你删除它,网站就开始工作了。所以,这真的是EmbeddableDocumentStore与WebApi的大破坏。

简而言之,确保在您的Raven.Database.dll项目中没有对WebApi的引用,并且dll也不会在您的WebApi项目的bin中结束(例如,通过设置Copy to Local = false )。

更新2

结果发现,我的主项目以某种方式引用了测试项目,这就是为什么Raven.Database.dll最终进入了我的主项目的bin文件夹。只要删除这个不必要的引用就可以了,没有设置Copy to Local = false的neet。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28056029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档