Skip to Main Content

ODP.NET

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Connection request timed out when opening Oracle connection in custom TraceListener

User_7M7GBOct 26 2022

I'm trying to create a database trace listener to write trace messages to Oracle database. I'm getting "Connection request timed out" at the OracleConnection.Open() method inside the trace listener with Oracle Managed Data Access library (Oracle.ManagedDataAccess.dll). A workaround is to open a connection in main program before writing the trace messages. This workaround works even with pooling disabled or a different connection string. Manually creating the trace listener to write the messages also works.
Using System.Data.OracleClient instead of Oracle.ManagedDataAccess.Client doesn't have this issue.
DatabaseTraceListener.cs:

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DatabaseTraceListenerTest
{
    public class DatabaseTraceListener : TraceListener
    {

        public static string ConnectionString = "Data Source=db;User ID=user;Password=password";
        public DatabaseTraceListener():base()
        {
        }

        public DatabaseTraceListener(string initializeData) : base(initializeData)
        {
        }

        private void WriteDatabase(string message)
        {
            try
            {
                using (var cn = new OracleConnection(ConnectionString))
                {
                    cn.Open();  //getting "Connection request timed out" here
                    using (var cmd = new OracleCommand
                    {
                        Connection = cn,
                        CommandText = "WRITE_TRACE",
                        CommandType = CommandType.StoredProcedure
                    })
                    {
                        cmd.Parameters.Add("Message", message);
                        cmd.ExecuteNonQuery();
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }
        public override void Write(string message)
        {
            this.WriteDatabase(message);
        }
        public override void WriteLine(string message)
        {
            this.WriteDatabase(message);
        }

    }
}

Program.cs:

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DatabaseTraceListenerTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Uncommenting the following solves the issue
            //using (var conn = new OracleConnection(DatabaseTraceListener.ConnectionString))
            //{
            //    conn.Open();
            //}
            Trace.WriteLine("test");
            //new DatabaseTraceListener().WriteLine("test");   //this also works
        }
    }
}

App.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
  </startup>
  <system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="DatabaseListener" type="DatabaseTraceListenerTest.DatabaseTraceListener, DatabaseTraceListenerTest"/>
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

I tried different versions of the client library (4.121.18.3, 4.122.19.1, 4.122.21.1) and got the same result.
Thank you.

Comments
Post Details
Added on Oct 26 2022
0 comments
1,684 views