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 2

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.