Вопрос

Я следую в примере здесь: http://developer.db4o.com/forums/tabid/98/aft/10114/default.aspx. Чтобы настроить мое приложение MVC2 с DB4O с помощью httpmodule. У меня также есть экземпляр linqpad, открытый для запроса данных, как я разрабатываю. Веб-приложение, похоже, работает как шарм, но LinqPad продолжает получать базы данныхFilelockedExceptions, пока не закрываю веб-сервер.

Как я уже сказал, я использую HTPModule из Gamlor практически Verbatim (используя клиентервер вместо встроенного - это единственное значение), а вот мой код LinqPad:

01  void Main() 
02  { 
03      using(var server = Db4oClientServer.OpenServer(db4opath, 0)) 
04      { 
05          using(var db = server.OpenClient()){ 
06              var result = (from Object o in db select o); 
07              result.Dump(); 
08          } 
09      } 
10  } 
11    
12  private string db4opath = @"C:\blah\blah\blah\blah.db4o";

Код linqpad работает нормально, если веб-сервер не работает.

Что я делаю неправильно?

Это было полезно?

Решение

Когда вы открываете базу данных DB4O, он блокирует файл базы данных для предотвращения повреждения повреждения. Это означает, что ваш сервер работает, файл базы данных заблокирован, а другой процесс не может получить доступ. (Да, есть способ отключить это, но это почти наверняка коррумпировано в базу данных)

Является ли вы WebServer также запустить режим клиентского сервера? Если это то, что вы можете подключить запущенный DB4O-экземпляр. Вы также можете сначала попробовать подключиться и только если вы потерпели неудачу напрямую открыть сервер?

Если вы используете только сервер встроенного клиента в вашем приложении ASP.NET, вы можете изменить это для отладки-целей на реальный клиентский сервер. ASP.NET использует только встроенные клиенты. Но это позволяет подключаться с Linq-pad.

Ответ на комментарий:

Вам нужно открыть полностью сервер, который поддерживает клиентов, которые подключаются к сети. Например:

// in your application
int PortNumber = 8888;
using(var server = Db4oClientServer.OpenServer("database.db4",PortNumber))
{
     server.GrantAccess("debug-user","debug-pwd");

     // application uses embedded client:
     using(var container = server.OpenClient())
     {
          // your application does stuff
     }

}

А потом в linqpad:

using(var client = Db4oClientServer.OpenClient("localhost",8888,"debug-user","debug-pwd"))
{
     // do stuff

}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top