AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi OracleConnection.Logon crashed in Windows Dienst
Thema durchsuchen
Ansicht
Themen-Optionen

OracleConnection.Logon crashed in Windows Dienst

Ein Thema von Maliko · begonnen am 2. Okt 2020 · letzter Beitrag vom 2. Okt 2020
Antwort Antwort
Maliko

Registriert seit: 20. Jun 2019
91 Beiträge
 
Delphi 10.3 Rio
 
#1

OracleConnection.Logon crashed in Windows Dienst

  Alt 2. Okt 2020, 12:32
Delphi-Version: 10.3 Rio
Huhu,

ich bin gerade echt am Verzweifeln. Und zwar habe ich einen Dienst geschrieben, welcher einen DataSnap-Rest-Server zur Verfügung stellt. Der Server selbst funktioniert auch einwandfrei (zumindest solange kein SSL aktiviert ist, aber das ist ein anderes Problem was ich mir zu gegebener Zeit anschauen werde), sobald ich allerdings versuche eine Verbindung zur Datenbank aufzubauen bekomme ich nur noch ein 500 Internal Server Error zurück.

Durchs setzen von Try-Except-Blöcken habe ich herausgefunden, dass das Problem die TOracleSession.Logon ist. Sobald die Procedure versucht wird aufzurufen rennt er in die Exception. Ich hab den Code auch einfach mal in einen anderen Server geworfen, der in einer Konsolenanwendung läuft, um Debuggen zu können, nur dort läuft er problemlos durch. Ich bin grad echt überfragt was da fehlt.

Hat vielleicht jemand von euch eine Ahnung was ich falsch mache und berücksichtigen muss, wenn ich versuche über TNS eine Verbindung zu Oracle über einen Windows-Dienst aufzubauen? Anbei auch noch der Code zum Verbindungsaufbau:

Delphi-Quellcode:
constructor TSessionManager.Create;
var mLog : TLogDatei;
begin
  FconfigIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));

  try
    FConnection := TOracleSession.Create(nil);
    FConnection.LogonDatabase := FconfigIni.ReadString('Datenbank', 'Database', 'db');
    FConnection.LogonUsername := FconfigIni.ReadString('Datenbank', 'Username', 'user');
    FConnection.LogonPassword := FconfigIni.ReadString('Datenbank', 'Password', 'pass');

    try
      FConnection.LogOn;
    except

    end;
  finally
    FconfigIni.Free;
  end;
end;
Vielen Dank auf jedem Fall schon einmal im Vorraus. Ich weiß nämlich grad echt nicht mehr weiter.

Viele Grüße
Maliko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#2

AW: OracleConnection.Logon crashed in Windows Dienst

  Alt 2. Okt 2020, 13:06
Schau Dir bitte zuerst mal die Rechte an, unter denen der Dienst und die Konsolenanwendung laufen.

Fehlt dem Dienst da eventuell irgendwas, was die Konsole hat?

Ist eventuell dort ein Hinweis dabei: https://www.delphipraxis.net/156733-...us-delphi.html

Hat er Infos für Dich? http://www.dba-oracle.com/t_windows_...e_location.htm

Passen die Umgebungsvariabeln, Registryeinträge, TNSNAMES.ORA, ... auch für den Dienst?
Muss der Dienst eventuell unter 'nem anderen Benutzerkonto laufen? Z. B: dem, unter dem die Konsolenanwendung läuft?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: OracleConnection.Logon crashed in Windows Dienst

  Alt 2. Okt 2020, 13:07
Und welche Exception genau?
(Klasse, Exception-Text)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Maliko

Registriert seit: 20. Jun 2019
91 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: OracleConnection.Logon crashed in Windows Dienst

  Alt 2. Okt 2020, 13:08
Initialization error
Could not locate OCI dll

OracleHomeKey:
OracleHomeDir: X:\ora11client64

EDIT: Ich hab auch mal versucht meinen normalen Benutzer als Startbenutzer einzutragen, gibt aber die selbe Fehlermeldung. X ist ein Netzlaufwerk, da die TNS-Treiber auf unseren Lokalen Rechnern nicht installiert sind.

Geändert von Maliko ( 2. Okt 2020 um 13:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: OracleConnection.Logon crashed in Windows Dienst

  Alt 2. Okt 2020, 13:29
Das Laufwerk x gibt es nicht in deinem (Vermutlich unter Systemkonto laufenden) Dienst.
Du müsstest dafür sorgen das ein Domain-User genutzt wird und auch noch das das LW verbunden wird (oder statt LW-Buchstaben der Share genutzt wird).

Aber für eine Anwendungsfall als Dienst würde ich deine Lokale "Installation" des Treibers empfehlen.
Mit dem Instant-Client gibt es auch dort was, was nicht auch den Rechner halt zerstört (XCopy-Installation + Setzen der Umgebungsvariable per Hand).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#6

AW: OracleConnection.Logon crashed in Windows Dienst

  Alt 2. Okt 2020, 13:33
Kennt der Dienst das Laufwerk X: ?

Mach' Dir mal 'ne Stringliste vor die Anmeldung und lade in die die TNSNames.ora.

Klappt das oder gibt es dabei 'nen Fehler? Dann kennt der Dienst irgendwas im Dateisystem nicht. Und der Fehler "Could not locate OCI dll" deutet sehr stark darauf hin.
Mir scheint da die tatsächliche Umgebung des Dienstes deutlich von der erwarteten abzuweichen.

Lies Dir im Dienst mal mit GetEnvironmentStrings die Umgebungsvariabeln ein und schreib' das Ergebnis in 'ne Datei. Den Inhalt der Datei vergleichst Du mit den Umgebungsvariabeln der funktionierenden Konsolenanwendung.

Gibt es Unterschiede, fehlen eventuell die für Oracle nötigen Variabeln?

Ist die OCI.dll über die Umgebungsvariabel Path des Dienstes zu finden?
  Mit Zitat antworten Zitat
Maliko

Registriert seit: 20. Jun 2019
91 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: OracleConnection.Logon crashed in Windows Dienst

  Alt 2. Okt 2020, 13:37
Ich hab den Ordner jetzt einfach mal von X: auf C: kopiert und jetzt geht es. Es scheint also tatsächlich der Fall zu sein, dass der Dienst nicht auf X: zugreifen kann. Ich muss am Montag mal mit unseren Sysadmins sprechen, wie wir das Lösen wollen. Zumindest kann ich jetzt erst mal weiterarbeiten.

EDIT: Ich hatte versucht den Dienst über meinen normalen Windows-Benutzer zu starten aber das hatte auch keinen Unterschied gemacht.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#8

AW: OracleConnection.Logon crashed in Windows Dienst

  Alt 2. Okt 2020, 13:51
Die Laufwerkszuweisung erfolgt erst bei der Anmeldung als User. Bei 'nem Dienst wird die nicht durchlaufen, so dass derartige Einstellungen im Dienst nicht zur Verfügung stehen.

Weißt Du wohin x: zeigt?

Wenn ja kannst Du statt X: auch die entsprechende Share nutzen, als z. B. statt x:\ora11client64 \\servername\ora11client64

Wenn der Dienst über \\servername\ora11client64 auf das Laufwerk zugreifen kann, könnte es eventuell funktonieren, wenn Du die Umgebungsvariabel Path am Anfang des Dienstes selbst erweiterst.

SetEnvironmentVariable('PATH', PChar(Format('%s;%s',['\\servername\ora11client64',GetEnvironmentVariable('PATH')])));

Zugegeben: Unschön, aber falls Ihr keine bessere Lösung findet, ist's zumindest einen Versuch wert.

Ggfls. könntest Du aber auch innerhalb des Dienstes die Laufwerksverbindung selbst herstellen: https://www.delphipraxis.net/129771-...verbinden.html

Geändert von Delphi.Narium ( 2. Okt 2020 um 13:52 Uhr) Grund: Schreibfehler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz