Overview
I want to replace Oracle.DataAccess with Orcale.ManagedDataAccess, but opening a connection with the latter throws an ORA-12537 network session end of file exception.
Exception message / stack trace
{OracleInternal.Network.NetworkException (0x000030F9): ORA-12537: Netzwerksession: Dateiende at OracleInternal.Network.ReaderStream.Read(OraBuf OB) at OracleInternal.TTC.OraBufReader.GetDataFromNetwork() at OracleInternal.TTC.OraBufReader.Read(Boolean bIgnoreData) at OracleInternal.TTC.MarshallingEngine.UnmarshalUB1(Boolean bIgnoreData) at OracleInternal.TTC.TTCProtocolNegotiation.ReadResponse()}
I am trying to connect to a Oracle 11g database and do not have a client installed on my local machine.
Working test application (unmanaged)
Using Oracle.DataAccess works fine.
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();
}
}
}
References and dependencies
- 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)
Project settings
Plattform target x86
Target Framework 4.5
Failing test application (managed)
Using the nuget package Official Oracle ODP.NET, Managed Driver 12.1.21
Code is identical to above. Only change:
using System;
using Oracle.ManagedDataAccess.Client;
//... rest the same as above
References and dependencies
Only:
- Oracle.ManagedDataAccess (4.121.2.0)
Project settings
Plattform target Any CPU
Target Framework 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>
I have tried different settings (NTS, none, all) and changed the connection string to User Id=XXX;password=XXX;Data Source=MyDataSource;, but the error stays the same.
Questions
- What could be causing the ORA-12537 network session end of file exception?
- Is a reference / dependency missing?
- Does something have to be configured on the DB server?
UPDATE
On the server we are getting an ORA-12679: Native services disabled by other process but required error in the alert.log.
It seems to have something to do with the encryption. Commenting out the following lines in the servers sqlnet.ora solves the issue.
#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)))
New question
How do we configure ManagedDataAccess so it works with the encryption?
Update 2
Seems to work now with ODP Managed Driver 12c:
https://www.nuget.org/packages/Oracle.ManagedDataAccess/