2009-06-29 1 views
0

Я использую встроенную клиент-серверную версию db4o (я называю OpenServer() вместо метода OpenFile()), чтобы я мог разместить сайт asp.net, который будет иметь несколько пользователи одновременно читают и записывают в базу данных. Единственная проблема заключается в том, что веб-хостинг, который мы используем, является средой среднего доверия, поэтому он бросает ошибку, заявляя, что сборка не поддерживает частично доверенных абонентов ...db4o работает в asp.net среда среднего доверия

Удивление, если у кого есть какие-либо предложения о том, как это сделать Работа. Благодаря!

:: ОБНОВЛЕНИЕ ::

Я перекомпилировал DLL db4o с [AllowPartiallyTrustedCallers] атрибутом, и теперь я получаю следующее сообщение об ошибке: конкретных

System.TypeInitializationException был необработанным кодом пользователя Message = «Инициализатор типа для« DataObjecten.db4oManager »сделал исключение». TypeName = "DataObjecten.db4oManager" InnerException: System.Security.SecurityException Message = "Запрос на разрешение типа«System.Security.Permissions.SecurityPermission, mscorlib, Version = 2.0.0.0, культура = нейтральной, PublicKeyToken = b77a5c561934e089 ' не смогли." Источник = "Db4objects.Db4o" StackTrace: на Db4objects.Db4o.Internal.Platform4.AddShutDownHook (PartialObjectContainer контейнер) в Db4objects.Db4o.Internal.PartialObjectContainer.Initialize1 (IConfiguration конфигурации) в Db4objects.Db4o.Internal.PartialObjectContainer .Open() в Db4objects.Db4o.Internal.IoAdaptedObjectContainer..ctor (IConfiguration конфигурации, строка файла) в Db4objects.Db4o.Internal.ObjectContainerFactory.OpenObjectContainer (IConfiguration конфигурации, String databaseFileName) в Db4objects.Db4o.Db4oFactory.OpenFile (Конфигурация IConfiguration, String databaseFileName) в Db4objects.Db4o.Db4oFactory.OpenServer (Конфигурация IConfiguration, String databaseFileName, Int32-порт, INativeSocke tFactory SocketFactory) в Db4objects.Db4o.Db4oFactory.OpenServer (IConfiguration конфигурации, Струнный databaseFileName, Int32 порт) на DataObjecten.db4oManager..cctor() InnerException:

+0

Просто добавил обновление к моему сообщению ... все еще пытаясь понять, смогу ли я обернуть голову вокруг этого ... – bbqchickenrobot

+1

Вы когда-нибудь смогли это решить? Я рассматриваю возможность использования db4o тоже, но опасаюсь, если я не могу использовать его в средстве доверия - не в банке среднего доверия, но вы никогда не знаете ... –

+0

Нет, он никогда не работал. Однако я собираюсь пересмотреть это в ближайшее время. Надеюсь, что будет решение. – bbqchickenrobot

ответ

-1

Я обнаружил, что db4o НЕ будет работать в среде среднего доверия.Любой, кто ищет решение nosql, которое встраивается или разрешено сервером и может использоваться в среде среднего доверия, должно взглянуть на ravendb.net - решило все мои проблемы ... (должен использовать управляемый механизм хранения munin).

Подобно базе данных объектов (db4o), но без всякой головной боли и гораздо более универсальным. Кроме того, работает с такими вещами как ссылка или стандартным выполнение запросов с помощью JSON/HTTP ...

Больших льгот являются:

Полного текста поиска с помощью Lucene.Net Sharding/Auto-шардинг репликации (WAN/LAN) LINQ Индексация/Auto Индексация Высокая производительность (намного быстрее, чем db4o) Родные .NET ACID совместимый Операции Multi-Tenancy Запуск в режиме клиента/сервера или встроенные , способные работать в среде Trust

+0

, если вы собираетесь отметить ответ, укажите причину, почему. – bbqchickenrobot

0

Я не знаю, если это работает, но вы может попробовать написать DLL-оболочку, которая имеет значение AllowPartiallyTrustedCaller, равную true, и передает все вызовы в DLL db4o.

Увидев, что db4o - это с открытым исходным кодом, вы можете скачать и перекомпилировать с помощью AllowPartiallyTrustedCaller, чтобы установить себя, конечно, конечно.

This нить однако предполагает, что это может не сработать.

+0

Эй, спасибо за ответ. Посмотрев на источник для db4o, я обнаружил, что они уже компилируют его с атрибутом APTC на dll. Хм ... кажется, не имеет никакого эффекта. Возможно, это связано с использованием режима клиент/сервер. Я попытаюсь использовать метод OpenFile() вместо OpenServer() и посмотреть, получилось ли я с тем же исключением безопасности. Если да, возможно, я попробую ваше предложение об упаковке. – bbqchickenrobot

0

Я тоже попал в эту проблему, и похоже, что db4o не будет работать в режиме клиент/сервер в среде веб-приложения среднего доверия.
This project for ASP.NET Providers using db4o, похоже, подтверждает это.
В нем указано, что db4o зависит от отражения и неуправляемого кода, которые оба запрещены в отношении доверия.
Я думаю, что ваша единственная надежда на прогресс в этом будет заключаться в том, чтобы следовать их предложению и найти общего поставщика, который позволяет вам полностью управлять своим кодом.
Очень разочаровывающе, так как мне понравилось работать с db4o, и это только помогло несколько недель работы.

+1

Действительно, db4o действительно зависит от отражения (относительно неуправляемого кода мы использовали, чтобы напрямую зависать от собственного кода, но мы больше не зависим). AFAIK (я не эксперт по безопасности), атрибут APTC должен быть достаточным, чтобы db4o можно было использовать в среде с надежной средой. В любом случае, поскольку у нас все еще есть открытая проблема (http://tracker.db4o.com/browse/COR-51), связанная с этой темой, я обсужу это на нашей следующей встрече. – Vagaus

Смежные вопросы