I think I've seen a similar problem caused by the application not closing the connections properly. In .NET it should be using this pattern:
//C#
string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
Console.WriteLine("{0}\t{1}", dr.GetString(0), dr.GetString(1));
}
}
using pattern ensures that connection is closed and disposed of correctly.
I think I've also seen the issue occur when the application is using a large number of connections simultaneously - I think this can be solved by tweaking the min/max pool sizes in the connection string.
You might also want to check how many connections you have to SQL Server:
select count(*) from sys.dm_exec_sessions
Check the "max worker threads" setting. Default value should be 0 unless you've upgraded from 2000. See here:
http://blogs.msdn.com/b/sqlsakthi/archive/2011/07/06/error-18056-state-29-the-client-was-unable-to-reuse-a-session-the-failure-id-is-29-after-upgrading-sql-2000-to-sql-2008-sp2.aspx