2009-06-29 10 views
0

Ich bin der Embedded Client/Server-Version von db4o mit (I genannt Openserver() anstelle von Openfile() -Methode), so dass ich eine asp.net Website hosten kann, die mehrere haben Benutzer lesen und schreiben gleichzeitig in die Datenbank. Das einzige Problem ist, dass der Webhost, den wir verwenden, eine mittlere vertrauenswürdige Umgebung ist, so dass es einen Fehler gibt, der besagt, dass die Assembly teilweise vertrauenswürdige Anrufer nicht unterstützt ...db4o in asp.net Medium Trust-Umgebung ausgeführt

Fragen, ob jemand irgendwelche Vorschläge hat, wie man das bekommt Arbeit. Vielen Dank!

:: UPDATE ::

ich die db4o DLL neu kompiliert habe mit dem [AllowPartiallyTrustedCallers] Attribute und jetzt bin ich die folgenden spezifischen Fehler bekommen:

System.TypeInitializationException durch Benutzercode unhandled war Message = "Der Typinitialisierer für 'DataObjecten.db4oManager' hat eine Ausnahme ausgelöst." Type-Name = "DataObjecten.db4oManager" Innerexception: System.Security.SecurityException Message = "Antrag auf Genehmigung des Typs‚System.Security.Permissions.SecurityPermission mscorlib, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 ' gescheitert." Source = "Db4objects.Db4o" Stacktrace: bei Db4objects.Db4o.Internal.Platform4.AddShutDownHook (PartialObjectContainer Container) bei Db4objects.Db4o.Internal.PartialObjectContainer.Initialize1 (IConfiguration config) bei Db4objects.Db4o.Internal.PartialObjectContainer .Open() bei Db4objects.Db4o.Internal.IoAdaptedObjectContainer..ctor (IConfiguration Config, String filename) bei Db4objects.Db4o.Internal.ObjectContainerFactory.OpenObjectContainer (IConfiguration Config, String databaseFileName) bei Db4objects.Db4o.Db4oFactory.OpenFile (IConfiguration Config, String databaseFileName) bei Db4objects.Db4o.Db4oFactory.OpenServer (IConfiguration Config, String databaseFileName, Int32 Port, INativeSocke tfactory socket) bei Db4objects.Db4o.Db4oFactory.OpenServer (IConfiguration Config, String databaseFileName, Int32-Port) bei DataObjecten.db4oManager..cctor() Innerexception:

+0

Ich habe meinem Beitrag gerade ein Update hinzugefügt ... versuche immer noch zu sehen, ob ich meinen Kopf um diesen herum wickeln kann ... – bbqchickenrobot

+1

Hast du es jemals geschafft, das zu lösen? Ich denke darüber nach, db4o auch zu verwenden, aber besorgt darüber, wenn ich es in mittlerem Vertrauen nicht benutzen kann - nicht in mittlerem Vertrauen ATM, aber Sie können nie wissen ... –

+0

Nein, hat es nie funktioniert. Ich werde dies jedoch bald wieder besuchen. Hoffentlich wird es eine Lösung geben. – bbqchickenrobot

Antwort

-1

Ich habe festgestellt, dass db4o wird nicht in einem Medium vertrauenswürdigen Umgebung arbeiten.Jeder, der nach einer nosql-Lösung sucht, die embeddable oder serverfähig ist und in einer mittleren Trust-Umgebung verwendbar ist, sollte sich ravendb.net anschauen - löste alle meine Probleme ... (muss die Managed-Engine von munin verwenden).

Ähnlich wie eine Objektdatenbank (db4o), aber ohne all die Kopfschmerzen und viel mehr vielseitig. Außerdem funktioniert mit Dingen wie Link oder Standard-Abfrage über JSON/HTTP ...

Big Vorteile sind:

Volltext über Lucene.NET Suche Sharding/Auto-Sharding Replikation (WAN/LAN) LINQ Indexing/Auto Indexing Große Leistung (Art und Weise schneller als db4o) Heimisch in .NET ACID-konformen Transaktionen Mehr Tenancy Run in Client/Server-Modus oder eingebettet Fähig in Medium läuft Vertrauen

+0

Wenn Sie eine Antwort markieren möchten, geben Sie den Grund dafür an. – bbqchickenrobot

0

Ich weiß nicht, ob das funktioniert, aber Sie könnte versuchen, eine Wrapper-DLL zu schreiben, die AllowPartiallyTrustedCaller auf true festgelegt hat, und alle Aufrufe an die db4o DLL übergibt.

Da db4o Open Source ist, können Sie es herunterladen und neu kompilieren, wobei AllowPartiallyTrustedCaller natürlich auf true gesetzt ist.

This Fäden legen jedoch nahe, dass das nicht funktionieren könnte.

+0

Hey Same, danke für die Antwort - Mit Blick auf die Quelle für db4o habe ich festgestellt, dass sie es bereits mit dem APTC-Attribut auf den DLLs kompilieren. Hmm ... scheint keine Wirkung zu haben. Vielleicht liegt es an mir, den Client/Server-Modus zu verwenden. Ich werde versuchen, die OpenFile() -Methode anstelle von OpenServer() zu verwenden und sehen, ob ich die gleiche Sicherheitsausnahme bekomme. Wenn ja, werde ich vielleicht Ihren Wrapper-Vorschlag versuchen. – bbqchickenrobot

0

Ich habe dieses Problem auch getroffen und es scheint, dass db4o nicht in einem Medium, das Vertrauen Web-Anwendungsumgebung im Client/Server-Modus arbeiten.
This project for ASP.NET Providers using db4o scheint dies zu bestätigen.
Es besagt, dass db4o auf Reflexion und unmanaged Code angewiesen ist, die beide in Medium Trust verboten sind.
Ich denke, Ihre einzige Hoffnung dieses Fortschritt wäre ihrem Vorschlag zu folgen und einen gemeinsamen Anbieter finden, die Sie Ihren Code in voller Vertrauen laufen zu lassen.
Sehr enttäuschend, da ich die Arbeit mit db4o genossen habe und dies hat gerade einige Wochen Arbeit zunichte gemacht.

+1

In der Tat hängt db4o von der Reflektion ab (in Bezug auf nicht verwalteten Code waren wir früher direkt vom nativen Code abhängig, sind aber nicht mehr abhängig). AFAIK (Ich bin kein Sicherheitsexperte), das APTC-Attribut sollte ausreichen, damit db4o in vertrauenswürdigen Umgebungen verwendet werden kann. Wie auch immer, da wir immer noch ein offenes Problem (http://tracker.db4o.com/browse/COR-51) zu diesem Thema haben, werde ich das in unserem nächsten Treffen besprechen. – Vagaus