2009-01-08 89 views
1

在开发相对简单的Web服务,这需要通过后提供的数据,并将其记录在数据库表中,我们得到这个错误:暗战使用LINQ DB连接到SQL

捕获到异常:远程服务器返回错误:(500)内部服务器呃 或。 堆栈跟踪:在某些服务器上System.Net.HttpWebRequest.GetResponse()

但没有其他服务器。那些得到这个的是物理机器,其他机器是虚拟的,显然物理服务器更强大。

据我们所知,问题是数据库连接在每次查询后都没有被释放回池中。我使用下面的使用模式:

   using (VoteDaoDataContext dao = new VoteDaoDataContext()) 
       { 

        dao.insert_response_and_update_count(answerVal, swid, agent, geo, DateTime.Now, ip); 
        dao.SubmitChanges(); 
        msg += "Thank you for your vote."; 
        dao.Dispose(); 
       } 

我增加了dao.Dispose()调用,以确保当方法完成连接都被释放,但我不知道它是否是必要的。

我是否正确使用此模式?我还需要做些什么才能确保连接正确返回到池中?

谢谢!

+0

在使用块内部不需要处理。是什么让你觉得你正在失去联系? – TGnat 2009-01-08 22:54:19

回答

3

您的诊断信息不够好。 HTTP/500不足以详细说明您的理论是否正确。如果您想要解决问题,您需要在日志中捕获完整的堆栈跟踪。我认为你已经在这里得出了一个结论。不,您不需要在使用{}块结束之前使用Dispose()。这就是使用{} 确实是

0

我认为dispose()调用是多余的,但我想确定。

我们看到连接池在SQL日志中饱和(我无法直接看到,我只是一个开发人员,而且这些东西在产品环境中运行),而我的操作人员说他看到了连接超时......并且一旦超时,服务器就会再次开始运行,直到下次连接池达到饱和。

我们正在经历调整连接池设置的过程......我想确定我没有做错任何事情,因为这是我第一次使用Linq。

谢谢!

+0

您无法从SQLserver的日志中看到Web服务器的连接池。 – 2009-01-09 02:22:25