Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web服务中静态资源的处理_C#_Web Services_Static_Dispose_Sqlconnection - Fatal编程技术网

C# web服务中静态资源的处理

C# web服务中静态资源的处理,c#,web-services,static,dispose,sqlconnection,C#,Web Services,Static,Dispose,Sqlconnection,在WCF.NET(C#)之前的web服务中,我有一个昂贵的IDisposable资源,我持有一个静态(实际上是ThreadStatic)引用。(在内部,它持有一个SqlConnection。)我如何确保在应用程序池刷新时处理它,我应该简单地抑制FxCop警告而不担心它,还是有第三个选项 最初,服务在每次请求时使用using块打开连接,但该设计因“连接资源问题”而被拒绝。此设计将因连接资源问题而被拒绝。如果您以前遇到过问题,您将再次遇到问题,因为您现在将使用更多的SqlServer连接(如果它是线

在WCF.NET(C#)之前的web服务中,我有一个昂贵的IDisposable资源,我持有一个静态(实际上是ThreadStatic)引用。(在内部,它持有一个SqlConnection。)我如何确保在应用程序池刷新时处理它,我应该简单地抑制FxCop警告而不担心它,还是有第三个选项


最初,服务在每次请求时使用using块打开连接,但该设计因“连接资源问题”而被拒绝。

此设计将因连接资源问题而被拒绝。如果您以前遇到过问题,您将再次遇到问题,因为您现在将使用更多的SqlServer连接(如果它是线程静态的,那么每个线程将有一个SqlServer,更重要的是,一个底层真实连接,即使它没有使用连接,并且将底层连接返回到池中).

很好。我没有选择新的设计。您有什么建议?您需要重新检查您的连接资源问题,看看实际的问题是什么。通常,最好的模式是打开一个连接,执行操作,然后关闭它,或者通过连接上的using块,或者-如果您返回一个datareader以便可以有效地迭代它,则使用CloseConnection选项创建using块中的datareader以便它的处置触发器是连接的处置。这样,“真实”连接将尽快返回到池中。你的零钱再也不退了,这让事情变得更糟。通常的模式哪里出错了?。。。。。。是否在为datareader创建连接(因此不在using中)和将datareader放入using中之间发生了错误?这种情况可能会导致泄漏(我为此使用了一个包装类,它将在处理连接时处理连接,但是当它成功地创建了一个带有关闭选项的datareader时,它将“停止拥有”连接,因为现在是读卡器将关闭它。另一个错误来源是,如果您在interator块中的datareader上使用,并且无论是错误还是故意,永远不要进入using块,因为第一次……迭代没有发生。同样,一个解决方案是包装类,在这种情况下是可枚举的“偷看”的包装在第一项中,以便始终在使用代码的读卡器中输入using块。当然,其他原因是可能的,以上只是我在实际代码中看到的原因。我确信的一件事是,使用太多同时连接的解决方案是不要改为使用更多连接的设计……你是对的,@Jon。我们没有时间来解决这个问题,当我们达到最大池大小(100)时,问题就出现了。谢谢!