KeyNotFoundException с RavenDb
Только что установил RavenDb Build-3528 как веб-сайт в IIS.
RavenDb работает просто отлично, management studio доступна на http://localhost:8080 , создал базы данных и т.д., Пока никаких проблем.
Однако при запуске моего приложения MVC 5 (с обычными контроллерами MVC и контроллерами WebApi) приложение аварийно завершает работу при запуске с сообщением json:
{
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:BuildsRavenDB-Stable-3.0Raven.DatabaseServerControllersRavenBaseApiController.cs:line 101 at Raven.Database.Server.Controllers.RavenDbApiController.InnerInitialization(HttpControllerContext controllerContext) in c:BuildsRavenDB-Stable-3.0Raven.DatabaseServerControllersRavenDbApiController.cs:line 112 at Raven.Database.Server.Controllers.RavenDbApiController.<ExecuteAsync>d__3a.MoveNext() in c:BuildsRavenDB-Stable-3.0Raven.DatabaseServerControllersRavenDbApiController.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()"
}
Забавная вещь: перед установкой RavenDb в качестве веб-сайта в IIS мы использовали RavenDb 2.5 в качестве встроенного сервера в нашем приложении MVC и работал просто отлично.
В Диспетчере событий Windows я не могу найти никакой полезной информации.
Кто-нибудь знает, что происходит?
1 ответ:
Ха!
Получается, что если закомментировать следующую строку в
WebApiConfig.cs
, то ошибка исчезает:// 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
заканчивается в папкеbin
проекта MVC/WebApi. Как только вы его удалите, сайт заработает. Так что это действительноEmbeddableDocumentStore
разрушительный хаос с WebApi.Raven.Database.dll
в ваших проектах WebApi, и что dll не попадает вbin
вашего проекта WebApi (например, установивCopy to Local = false
).Обновление 2
Оказывается, каким-то образом мой основной проект имел ссылку на тест проект, вот почему
Raven.Database.dll
оказался в папке bin моего основного проекта. Просто удаление ненужных ссылок не работает, нет необходимости устанавливатьCopy to Local = false
.