Je souhaite remplacer Oracle.DataAccess par Orcale. Géré DataAccess, mais l'ouverture d'une connexion avec ce dernier génère une fin de session réseau ORA-12537] de fichier exception.
Message d'exception/trace de pile
{OracleInternal.Network.NetworkException (0x000030F9): ORA-12537 : Netzwerksession: Dateiende à OracleInternal.Network.ReaderStream.Read (OraBuf OB) à OracleInternal. TTC.OraBufReader.GetDataFromNetwork () chez OracleInternal.TTC.OraBufReader.Read (Boolean bIgnoreData) chez OracleInternal.TTC.MarshallingEngine.UnmarshalUB1 (Boolean bIgnoreData) chez OracleInternal.TTC.TTCProtection
J'essaie de me connecter à une base de données Oracle 11g et aucun client n'est installé sur mon ordinateur local.
Utiliser Oracle.DataAccess fonctionne bien .
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();
}
}
}
Cible de la plate-forme x86
Cadre cible 4.5
Utilisation du package de nuget Pilote géré par Oracle officiel ODP.NET 12.1.21
Le code est identique à ci-dessus. Seul changement:
using System;
using Oracle.ManagedDataAccess.Client;
//... rest the same as above
Seulement:
Cible de la plate-forme N'importe quel processeur
Cadre cible 4.5
<?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>
J'ai essayé différents paramètres (NTS, aucun, tous) et changé la chaîne de connexion en ID utilisateur = XXX; mot de passe = XXX; source de données = MyDataSource;, mais l'erreur reste la même.
Sur le serveur, nous obtenons un ORA-12679: services natifs désactivés par un autre processus mais requis dans le fichier alert.log.
Cela semble avoir quelque chose à voir avec le cryptage. Commenter les lignes suivantes dans les serveurs sqlnet.ora résout le problème.
#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)))
Comment configurons-nous ManagedDataAccess pour qu'il fonctionne avec le chiffrement?
Semble fonctionner maintenant avec ODP Managed Driver 12c:
https://www.nuget.org/packages/Oracle.ManagedDataAccess/
Edit: ASO est maintenant supporté. Mettez à niveau vers ODAC 12c version 4 ou ultérieure. Si cela ne résout pas votre problème, consultez le fichier alert.log sur le serveur de base de données et recherchez (sur Google) toutes les erreurs qui s'y produisent lors de la tentative de connexion.
Réponse originale:
Au moment de la rédaction de ce document (30/04/15), le cryptage ASO (Oracle Advanced Security Option) avec le pilote géré ODP.NET n’est pas pris en charge, ce qui est à l’origine des erreurs.
Ceci est très probablement pris en charge à un moment donné dans le futur. Par conséquent, si vous lisez ceci à une date ultérieure, consultez les derniers documents ODP.NET pour savoir si une mise à niveau de ODP.NET est nécessaire.
http://docs.Oracle.com/cd/E56485_01/win.121/e55744/InstallConfig.htm#CHDJIDIG
À compter du 5 octobre 2015, le pilote Oracle.ManagedDataAccess (ODAC 12c version 4) prend en charge ASO.
https://apex.Oracle.com/pls/apex/f?p=18357:39:18138408495219::NO::P39_ID:28201
Assurez-vous de ne pas avoir d'anciennes versions de Oracle.ManagedDataAccess dans le GAC. Il semble que plusieurs versions de la DLL ont la même AssemblyVersion.
J'avais une version plus ancienne dans le CLR 4 GAC (C:\Windows\Microsoft.NET\Assembly\GAC_MSIL pour moi) qui avait été installée avec un client Oracle 12.1.
Puisque dll: s dans le GAC sont toujours utilisés en premier, l’ancienne version ASO-uncapable a été utilisée, mais j’ai pensé que j’avais utilisé la version la plus récente.
La solution consistait à désinstaller l'ancienne version du GAC. La première étape de l'installation du fichier Lisez-moi du paquet 12.1.2400 consiste à "désinstaller GAC et à déconfigurer tout assemblage existant".
Eu certains des mêmes problèmes. Vous avez trouvé une entrée dans le registre: HKEY_LOCAL_MACHINE\SOFTWARE\wow6432\Oracle. Si cette partie contient une entrée ODP.NET.managed, possible avec une autre clé (nom version dépendante), vérifiez si cet entyr contient une chaîne appelée TNS_ADMIN. Cette chaîne doit être supprimée ou la valeur modifiée pour un répertoire non existant. Si la chaîne existe et pointe vers un répertoire valide, le client géré n'utilise pas le paramètre du fichier de configuration et échoue. Une enquête plus approfondie devrait être utilisée, mais j'ai mes données fonctionnelles et je dois reporter le reste. ..
Moi aussi j'ai eu du mal avec cette erreur. Enfin, j'ai essayé avec Oracle.ManagedDataAccess.dll pour 12c (version 4.122.1.0). Créé une référence pour les dll ci-dessus à partir du répertoire installé ODAC (\ odp.net\managed\common), cela a fonctionné ... !!! Partager ma solution.