db4o работает в среде asp.net Medium Trust - PullRequest
0 голосов
/ 29 июня 2009

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 16 июня 2010

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

0 голосов
/ 08 июня 2011

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

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

Большие льготы:

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

0 голосов
/ 29 июня 2009

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

Поскольку db4o является открытым исходным кодом, вы можете загрузить и перекомпилировать, установив для AllowPartiallyTrustedCaller значение true для себя.

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

...