Laden einer DLL

XChris

Erfahrenes Mitglied
Hallo,

ich habe eine Anwendung geschrieben. Diese Funktioniert auf Rechnern mit Entwicklung wunderprächtig. (XP, Framework 1.1)

Nun hab ich einen Win2000 Rechner folgendes getan:
Framework drauf (1.1) und OracleClient drauf. Mit einem kleinem C# Testproggi kann erreich ich auch die DB.

Mein eigentliches Programm läd dynamsich Assembly nach und macht nun folgendes:

LOG:
<code>

2005-11-24 17:13:47,000 [121960] ERROR Extension_1 [] - Es kann keine Verbindung zur zentralen Datenbank hergestellt werden.
Exception: de.ongeo.lora.appCore.exceptions.DBConnector.NetDBConnectorLoginException
Message: Eine Ausnahme vom Typ de.ongeo.lora.appCore.exceptions.DBConnector.NetDBConnectorLoginException wurde ausgelöst.
Source: dataCore
at de.ongeo.lora.dataCore.internal.ServiceConnector..ctor()
at de.ongeo.lora.dataCore.internal.ServiceConnector.getServiceConnector()
at de.ongeo.lora.dataCore.internal.InitDataCore.Init()
at OnGeo.Extension.MailListenerExtension.StartLokalConfig() in C:LORAChristian_viewongeo_loraServerExtensionMailListenerExtension.vb:line 266

Nested Exception

Exception: de.ongeo.lora.appCore.exceptions.DBConnector.ConnectionFailedException
Message:
Source: dataDBConnector
at de.ongeo.lora.dataDBConnector.internal.OracleConnector.connect() in C:LORAChristian_viewongeo_loradataDBConnectorinternal.vb:line 218
at de.ongeo.lora.dataDBConnector.internal.BasisConnector.login(String connectionstring) in C:LORAChristian_viewongeo_loradataDBConnectorinternal.vb:line 54
at de.ongeo.lora.dataCore.internal.ServiceConnector..ctor()

Nested Exception

Exception: System.Exception
Message: System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
Source: System.Data.OracleClient
at System.Data.OracleClient.DBObjectPool.GetObject(Object owningObject, Boolean& isInTransaction)
at System.Data.OracleClient.OracleConnectionPoolManager.GetPooledConnection(String encryptedConnectionString, OracleConnectionString options, OracleConnection owningObject, Boolean& isInTransaction)
at System.Data.OracleClient.OracleConnection.OpenInternal(OracleConnectionString parsedConnectionString, Object transact)
at System.Data.OracleClient.OracleConnection.Open()
at de.ongeo.lora.dataDBConnector.internal.OracleConnector.open() in C:LORAChristian_viewongeo_loradataDBConnectorinternal.vb:line 705
at de.ongeo.lora.dataDBConnector.internal.OracleConnector.connect() in C:LORAChristian_viewongeo_loradataDBConnectorinternal.vb:line 214



2005-11-24 17:13:47,015 [121960] INFO Extension_1 [] - --- START der Extension Base ---
<code>

Meine Vermutung ist, dass er die System.Data.OracleClient.dll nicht sauber läd. Denn im Ausgabeverzeichniss ist sie nicht (trotz lokaler Kopie eingeschaltet) und mein anderes Proggi, was ähnlich funktioniert funktioniert. Wenn ich die Datei einfach in das Verzeichniss lege, klappt es auch nicht ...

Irgendwer nen Schimmer, wie man noch vorgehen könnte?

Chris
 
Moin XChris!

Was passiert denn in den angegebenen Zeilen?
Allein die Exception Messages bringen uns kaum weiter.
Exception: System.Exception Message: System.Data.OracleClient requires Oracle client software version 8.1.7 or greater.
Kann es sein das deine Oracle Version älter ist als es das Framework erwartet?
In der Exception steht, daß sie nicht älter als 8.1.7 sein darf. ;)

MfG, cosmo
 
Also:

Ich habe einen Dienst geschrieben. Dieser läd dynamisch beliebige Assemblys nach - die einem besonderem Interface entsprechen. Diese Assembly werden zyklisch immer wieder ausgeführt.

Eins dieser Assemblys braucht ne Datenbank ... Aufbau wie folgt - Datenbankschicht:

Interface für den Zugriff
Abstrakte Klasse (IDBConnection usw ....)
Konkrete Klasse (Oracle Client ...)

Es passiert also folgendes:
1. Start des Server
2. Durchforsten eines Verzeichnissen nach DLL.
3. Laden der DLL - wenn diese dem Interface entsprechen, dann ausführen
..
3.1. Laden der Datenschicht


Ein benutzt die selbe DB Schicht - ist aber ne normale Applikation. Es hat nur einen Knopf und nen Feld für nen Connection String und eine Ampel. Ist die Ampel GRÜN - besteht eine Connection. UND DAS GEHT ...

Ich vermute, dass durch das dynamische Laden der "Erweiterung" die DLL: System.Data.OracleClient nicht mitgeladen wurde ... warum auch immer.


Chris
 
Willst mir jetzt damit sagen das der Server schon eine Verbindung zu der DB aufgebaut hat? :confused:
Wofür brachst dann die DLL? Übergib der DLL in dem Fall doch die bestehende Connection.
Oder übergib der DLL den ConnectionString und sie connected dann für den Server.

Desweiteren hab ich noch nichts mit Oracle gemacht. :-(
Kann sich ja mal jemand melden der sich damit eher auskennt. :)

MfG, cosmo
 
Also, 2 Punkte:

1. Sind die Oracle Client-Tools auch tatsächlich auf der entsprechenden Maschine installiert? Ohne die würde nämlich auch nicht funktionieren.

2. Zeig mal wie du deine Assemblies ladest .. btw. könntest dir ja ein Log-File mitschreiben, dann würdest sehr einfach rausfinden, ob es beim Laden der Assemblies Probleme gibt oder nicht. Log-Files sind sowieso immer eine gute Idee ...
 
cosmochaosmaker hat gesagt.:
Willst mir jetzt damit sagen das der Server schon eine Verbindung zu der DB aufgebaut hat? :confused:

Nein :)
Ein kleines alleinstehendes Programm, dass die SELBE DLL für die Datenverbindung nutzt funktioniert. Es hat nichts mit meinem eigentlichen Programm zu tun - beweist jedoch, dass die DLL geht. Der Unterschied ist, dass die Oracle DLL HIER über eine andere DLL direkt gelinkt wird (Projektverweis).
Bei meinem ECHTEM Programm, wird eine DLL dynamsich geladen und ruft wiederum den oracle Mist auf.

Wofür brachst dann die DLL? Übergib der DLL in dem Fall doch die bestehende Connection.
Oder übergib der DLL den ConnectionString und sie connected dann für den Server.

Es geht nicht um Oralce. Es geht eigentlich darum, dass ich ein Assymbly dynamsich lade, welches weitere DLL benötigt. Ich hab die als lokale Kopie mitgegeben und auch als Porgammverweis ... alles mögliche hab ich schon ausprobiert.

Chris
 
Zurück