db4o работает в asp.net Среде среднего уровня доверия
-
21-08-2019 - |
Вопрос
Я использую встроенную клиент-серверную версию db4o (я вызвал OpenServer() вместо метода OpenFile()), чтобы я мог разместить asp.net веб-сайт, на котором несколько пользователей будут одновременно читать и записывать данные в базу данных.Единственная проблема заключается в том, что веб-хостинг, который мы используем, является средой среднего доверия, поэтому он выдает ошибку, указывающую, что сборка не поддерживает частично доверенных абонентов...
Интересно, есть ли у кого-нибудь какие-либо предложения о том, как заставить это работать.Спасибо!
::Обновить ::
Я перекомпилировал библиотеку dll db4o с атрибутом [AllowPartiallyTrustedCallers], и теперь я получаю следующую конкретную ошибку:
Система.Исключение TypeInitializationException не было обработано пользовательским кодом Message="Инициализатор типа для 'DataObjecten.db4oManager' выдал исключение". Имя типа="DataObjecten.db4oManager" Исключение InnerException:Система.Безопасность.Исключение SecurityException Сообщение="Запрос разрешения типа 'System.Безопасность.Разрешения.Ошибка SecurityPermission, mscorlib, версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken=b77a5c561934e089". Источник="Db4objects.Db4o" Трассировка стека:в Db4objects.Db4o.Внутренний.Platform4.addShutdownHook(контейнер PartialObjectContainer) в Db4objects.Db4o.Внутренний.PartialObjectContainer.Инициализируйте 1(IConfiguration config) в Db4objects.Db4o.Внутренний.PartialObjectContainer.Открыть() в Db4objects.Db4o.Внутренний.IoAdaptedObjectContainer..ctor(конфигурация IConfiguration, имя файла строки) в Db4objects.Db4o.Внутренний.ObjectContainerFactory.Откройте objectcontainer(IConfiguration config, строковое имя файла базы данных) в Db4objects.Db4o.Db4oFactory.OpenFile(конфигурация IConfiguration, строковое имя файла базы данных) в Db4objects.Db4o.Db4oFactory.OpenServer(конфигурация IConfiguration, строковое имя файла базы данных, порт Int32, INativeSocketFactory SocketFactory) в Db4objects.Db4o.Db4oFactory.Открытый сервер (конфигурация IConfiguration, строковое имя файла базы данных, порт Int32) в DataObjecten.db4oManager..cctor() Исключение InnerException:
Решение 3
Я обнаружил, что db4o НЕ будет работать в среде среднего доверия.Любой, кто ищет nosql-решение, которое можно встраивать или использовать с поддержкой сервера в среде среднего уровня доверия, должен взглянуть на ravendb.net - решило все мои проблемы...(необходимо использовать механизм управляемого хранилища munin).
Аналогично объектной базе данных (db4o), но без всей этой головной боли и гораздо более универсально.Кроме того, работает с такими вещами, как ссылка или стандартный запрос через JSON / HTTP...
Большие льготы заключаются в:
Полнотекстовый поиск с помощью Lucene.NET Сегментирования / автоматического сегментирования Репликация (WAN / LAN) Индексирование LINQ / автоматическое индексирование Отличная производительность (намного быстрее, чем db4o) Встроен в .NET Совместим с ACID Транзакции Многопользовательский Запуск в режиме клиент/сервер или встроенный Способен работать в режиме среднего доверия
Другие советы
Я не знаю, работает ли это, но вы могли бы попробовать написать DLL-оболочку, которая имеет AllowPartiallyTrustedCaller
установите значение true и передает все вызовы библиотеке DLL db4o.
Поскольку db4o имеет открытый исходный код, вы могли бы загрузить и перекомпилировать с AllowPartiallyTrustedCaller
конечно, настройтесь на то, чтобы быть самим собой.
Это поток, однако, предполагает, что это может не сработать.
Я также столкнулся с этой проблемой, и похоже, что db4o не будет работать в режиме клиент / сервер в среде веб-приложений среднего уровня доверия.
Этот проект для ASP.NET Провайдеров, использующих db4o кажется, это подтверждает.
В нем говорится, что db4o зависит от отражения и неуправляемого кода, которые оба запрещены при среднем доверии.
Я думаю, что ваша единственная надежда добиться прогресса в этом - последовать их предложению и найти общего поставщика, который позволит вам запускать ваш код с полным доверием.
Очень разочаровывает, так как мне нравилось работать с db4o, и это только что свело на нет несколько недель работы.