it-swarm.com.de

ODP.NET Oracle.ManagedDataAccess bewirkt, dass die ORA-12537-Netzwerksitzung die Datei beendet

Überblick

Ich möchte Oracle.DataAccess durch Orcale. Managed DataAccess ersetzen, aber das Öffnen einer Verbindung mit dem letzteren löst eine ORA-12537-Netzwerksitzungsendedatei -Ausnahme aus.

Ausnahmemeldung/Stack-Trace

{OracleInternal.Network.NetworkException (0x000030F9): ORA-12537 : Netzwerksession: Dateiende bei OracleInternal.Network.ReaderStream.Read (OraBuf OB) bei OracleInternal.TTC.OraBufReader.GetDataFromNetwork () bei OracleInternal.TC. OraBufReader.Read (Boolean bIgnoreData) bei OracleInternal.TTC.MarshallingEngine.UnmarshalUB1 (Boolean bIgnoreData) bei OracleInternal.TTC.TTCProtocolNegotiation.ReadResponse ()}

Ich versuche, eine Verbindung zu einer Oracle 11g-Datenbank herzustellen, und auf meinem lokalen Computer ist kein Client installiert.

Funktionierende Testanwendung (nicht verwaltet)

Die Verwendung von Oracle.DataAccess funktioniert einwandfrei .

using System;
using Oracle.DataAccess.Client;

namespace App.Odp.Unmanaged
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            //dummy connection string. using SID 
            string connectionString = "User Id=***;password=***;Data Source=1.2.3.4:1521/sid01;";

            try
            {
                using (var conn = new OracleConnection(connectionString))
                {
                    conn.Open();
                    using (OracleCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "select * from all_users";

                        using (OracleDataReader reader =     cmd.ExecuteReader())
                        {                            
                            Console.WriteLine("VisibleFieldCount: {0}", reader.VisibleFieldCount);
                            Console.WriteLine("HiddenFieldCount: {0}", reader.HiddenFieldCount);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error:{0}", ex.Message);
            }

            Console.ReadLine();
        }
    }
}

Referenzen und Abhängigkeiten

  • Oracle.DataAccess (2.111.7.0)
  • oci.dll (11.1.0.1)
  • orannzsbb11.dll (11.1.0.6)
  • oraociei11.dll (Oracle Call Interface Instant Client)
  • OraOps11w.dll (2.111.7.0)

Projekt Einstellungen

Plattformziel x86
Zielrahmen 4.5

Fehlerhafte Testanwendung (verwaltet)

Verwenden des Nuget-Pakets Official Oracle ODP.NET, Managed Driver 12.1.21

Code ist identisch mit oben. Nur ändern:

using System;
using Oracle.ManagedDataAccess.Client;
//... rest the same as above

Referenzen und Abhängigkeiten

Nur:

  • Oracle.ManagedDataAccess (4.121.2.0)

Projekt Einstellungen

Plattformziel Beliebige CPU
Zielrahmen 4.5

App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="Oracle.manageddataaccess.client" type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client" />
      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no" />
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
        <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.121.2.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <Oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <!--<dataSource alias="MyDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(Host=1.2.3.4)(PORT=1521))(CONNECT_DATA=(SID=sid01)))" />-->
      </dataSources>
      <settings>
        <!--<setting name="SQLNET.AUTHENTICATION_SERVICES" value="NTS"/>-->
      </settings>
    </version>
  </Oracle.manageddataaccess.client>
</configuration>

Ich habe verschiedene Einstellungen ausprobiert (NTS, keine, alle) und die Verbindungszeichenfolge in Benutzer-ID = XXX; Kennwort = XXX; Datenquelle = MyDataSource;, aber der Fehler bleibt gleich.

Fragen

  • Was kann die Ausnahmebedingung ORA-12537 Netzwerksitzung Ende von Datei verursachen?
  • Fehlt eine Referenz/Abhängigkeit?
  • Muss auf dem DB-Server etwas konfiguriert werden?

AKTUALISIEREN

Auf dem Server erhalten wir ein ORA-12679: Native Services, die von einem anderen Prozess deaktiviert, aber benötigt werden Fehler im alert.log.

Es scheint etwas mit der Verschlüsselung zu tun zu haben. Das Auskommentieren der folgenden Zeilen in der Datei sqlnet.ora behebt das Problem.

#SQLNET.AUTHENTICATION_SERVICES=(NTS)
#SQLNET.ENCRYPTION_TYPES_SERVER = (rc4_128, rc4_256)
#SQLNET.ENCRYPTION_SERVER=REQUIRED
#ENCRYPTION_WALLET_LOCATION=
#          (SOURCE=(METHOD=FILE)(METHOD_DATA=
#                  (DIRECTORY=...\%Oracle_SID%\wallet)))

Neue Frage

Wie konfigurieren wir ManagedDataAccess, damit es mit der Verschlüsselung funktioniert?

Update 2

Scheint jetzt mit ODP Managed Driver 12c zu funktionieren:
https://www.nuget.org/packages/Oracle.ManagedDataAccess/

9
Greg

Bearbeiten: ASO wird jetzt unterstützt. Aktualisieren Sie auf ODAC 12c Release 4 oder höher. Wenn sich das Problem dadurch nicht beheben lässt, überprüfen Sie die Datei "alert.log" auf dem Datenbankserver, und untersuchen Sie (google) alle Fehler, die dort beim Verbindungsaufbau auftreten.


Ursprüngliche Antwort:

Zum jetzigen Zeitpunkt (30.04.15) gibt es keine Unterstützung für die ASO-Verschlüsselung (Oracle Advanced Security Option) mit ODP.NET Managed Driver, die Ihre Fehler verursacht.

Dies wird wahrscheinlich zu einem späteren Zeitpunkt in der Zukunft unterstützt. Wenn Sie dies zu einem späteren Zeitpunkt lesen, überprüfen Sie die neuesten ODP.NET-Dokumente, um zu sehen, ob ein Upgrade von ODP.NET erforderlich ist.

http://docs.Oracle.com/cd/E56485_01/win.121/e55744/InstallConfig.htm#CHDJIDIG

2
Christian Shay

Ab dem 5. Oktober 2015 unterstützt der Oracle.ManagedDataAccess-Treiber (ODAC 12c Release 4) ASO.

https://apex.Oracle.com/pls/apex/f?p=18357:39:18138408495219::NO::P39_ID:28201

3
David Dindak

Stellen Sie sicher, dass Sie keine älteren Versionen von Oracle.ManagedDataAccess im GAC haben. Es scheint, dass mehrere Versionen der DLL die gleiche AssemblyVersion haben.

Ich hatte eine ältere Version in der CLR 4-GAC (C:\Windows\Microsoft.NET\Assembly\GAC_MSIL für mich), die mit einem Oracle 12.1-Client installiert wurde.

Da dll: s im GAC immer zuerst verwendet wird, wurde die alte ASO-unapable-Version verwendet, aber ich dachte, ich hätte die neuere Version verwendet.

Die Lösung bestand darin, die ältere Version von der GAC zu deinstallieren. Der erste Installationsschritt in der Readme-Datei für das Nuget-Paket 12.1.2400 besteht darin, "GAC abbrechen und vorhandene Baugruppe dekonfigurieren".

1

Hatte einige der gleichen Probleme. In der Registry wurde ein Eintrag gefunden: HKEY_LOCAL_MACHINE\SOFTWARE\wow6432\Oracle. Wenn dieser Teil einen ODP.NET.managed-Eintrag enthält, kann mit einem anderen Schlüssel (Name der Version abhängig) geprüft werden, ob dieser Eintrag erscheint enthält eine Zeichenfolge namens TNS_ADMIN. Diese Zeichenfolge sollte gelöscht oder der Wert in ein nicht vorhandenes Verzeichnis geändert werden. Wenn die Zeichenfolge vorhanden ist und auf ein gültiges Verzeichnis verweist, verwendet der verwaltete Client die Einstellung nicht aus der Konfigurationsdatei und schlägt fehl. Weitere Untersuchungen sollten verwendet werden, aber ich habe meine Sachen zum Laufen gebracht und muss den Rest verschieben. ..

0
Carl Høgstedt

Ich hatte diesen Fehler erhalten, und es war ein einfacher Fall, dass meine Abfrage, die ich ausführte, einen Fehler aufwies.

0
Chris Hammond

Ich habe auch mit diesem Fehler zu kämpfen. Schließlich habe ich es mit Oracle.ManagedDataAccess.dll für 12c (Version 4.122.1.0) versucht. Es wurde eine Referenz für die obige DLL aus dem ODAC-Installationsverzeichnis (\ odp.net\managed\common) erstellt. Meine Lösung teilen 

0