Ask a Question related to ASP.NET General, Design and Development.
-
Sean Nolan #1
Trap "connection pool" errors
We have implemented unhandled error trapping at the application level and
log these errors to our database. One error, however, the does not get
trapped is when the connection pool has exceeded the max number of
connections.
Obviously, we need to find the place(s) in our code where connections are
not closed correctly (espcially in loops), but I'm wondering if it's
possible to trap this error and to find out which part of our code (i.e.
stack trace) caused it. It seems logical that the application itself does
not produce the error since there is no error in the codebehind file. Is it
more of an IIS-level error?
Thanks in advance for your thoughts.
Sean
Sean Nolan Guest
-
"Contribute cannot verify your connection information."on a Local / Network connection
When I create a connection key and specify Local/Network for the website, then select the right folder, I get this error: "Contribute cannot... -
"Contribute cannot verify your connection information"- Every other problem ruled out, but still no connection
Hi, first, please allow me to give you the background info Client OS - Windows 2000/XP Pro Version - Contribute 2.01 - I installed the patch from... -
2 errors: "The parameter is incorrect" and "Overlapped I/O operation is in progress."
Hello, I am writing an ASP app which is giving me some very frustrating errors. They appear intermittently, no real pattern to them, and often... -
Pop-up window errors:"translators not loaded due to errors"
I keep getting pop-up windows when using DWMX....any suggestions as to how to fix this type of error? The pop-up says: at line 16... -
"Connection Reset by Peer" or "hang"
(Original Post: http://www.knoppix.net/forum/viewtopic.php?t=3745) Here is my problem: I am trying to install a software (Steam), and from time... -
David Browne #2
Re: Trap "connection pool" errors
"Sean Nolan" <snolan@harriton.com> wrote in message
news:Oa7doR7RDHA.3768@tk2msftngp13.phx.gbl...It it possible. The general idea is to have a object that will be Garbage> We have implemented unhandled error trapping at the application level and
> log these errors to our database. One error, however, the does not get
> trapped is when the connection pool has exceeded the max number of
> connections.
>
> Obviously, we need to find the place(s) in our code where connections are
> not closed correctly (espcially in loops), but I'm wondering if it's
> possible to trap this error and to find out which part of our code (i.e.
> stack trace) caused it.
Collected in the same pass as your connection. Whenever a connection is
opened, store the stack trace of the opening method. And put a finalizer on
that object, and write out a trace entry if the finalizer runs and the
connection is still open.
One way to do this is to have a "wrapper object" for your connection.
But then your app code has to create the wrapper instead of the connection.
I think this is a good thing, since you can implement all the DAAB methods
as instance methods of your wrapper object. But that's another story.
Assuming you are using SQLServer (or some other connection that has a
StateChanged event), there may be an easier way.
Without a wrapper object, to get an object which will be finalized at the
same time as the connection we can use a "spy" object.
If we have a "spy" object which handles the StateChaned event of the
SQLConnection, and we give the spy object a reference to the connection we
will have what we want. If 2 objects mutually refer to each other, then
they will always be GC'd at the same time. The spy refers to the
SQLConnection and since the spy handles an event on teh SQLConnection, the
SQLConnection's delegate list contains a reference to the spy object. Voila!
There follows sample program to do this.
David
Imports System.Data.SqlClient
Class ConnectionFactory
Private Class ConnectionSpy
Private con As SqlConnection
Dim st As StackTrace
Public Sub New(ByVal con As SqlConnection, ByVal st As StackTrace)
Me.st = st
'latch on to the connection
Me.con = con
AddHandler con.StateChange, AddressOf StateChange
End Sub
Public Sub StateChange(ByVal sender As Object, ByVal args As
System.Data.StateChangeEventArgs)
If args.CurrentState = ConnectionState.Closed Then
'detach the spy object and let it float away into space
GC.SuppressFinalize(Me)
RemoveHandler con.StateChange, AddressOf StateChange
con = Nothing
st = Nothing
End If
End Sub
Protected Overrides Sub Finalize()
'if we got here then the connection was not closed.
Trace.WriteLine("WARNING: Open SQLConnection is being Garbage
Collected")
Trace.WriteLine("The connection was initially opened " & st.ToString)
End Sub
End Class
Public Shared Function OpenConnection(ByVal connect As String) As
SqlConnection
Dim con As New SqlConnection(connect)
con.Open()
Dim st As New StackTrace(True)
Dim sl As New ConnectionSpy(con, st)
Return con
End Function
End Class
Module Module1
Sub Main()
'pipe trace output to the console
'in your app this would go to a trace file
System.Diagnostics.Trace.Listeners.Add(New
TextWriterTraceListener(System.Console.Out))
Dim connect As String = "..."
Dim c As SqlConnection = ConnectionFactory.OpenConnection(connect)
c = Nothing '!!the connection was not closed
c = ConnectionFactory.OpenConnection(connect)
c.Close() 'this time it was closed
c = Nothing
GC.Collect(GC.MaxGeneration)
GC.WaitForPendingFinalizers()
'output will show 1 warning
End Sub
End Module
David Browne Guest



Reply With Quote

