【发布时间】:2010-03-02 23:40:30
【问题描述】:
您好, 我必须关注问题。我有一个在 IIS7 下运行的 WCF 服务。应用程序连接到它,WCF 服务向 DB 发出一些请求。我在 SQL Server 2005 的活动监视器中注意到,在恰好有 102 个活动连接之后,IIS7 中的应用程序池挂起。在此之后,我无法连接到我的 WCF 服务。然后只有 IIS7 重启有帮助。 对于我使用 ChannelFactory 的连接,每次请求后它都会关闭。我还引入了这样的代码来确保 Channel 已关闭:
catch (FaultException)
{
Factory.Abort();
return null;
}
catch (CommunicationException)
{
Factory.Abort();
return null;
}
catch (TimeoutException)
{
Factory.Abort();
return null;
}
catch (Exception ex)
{
Factory.Abort();
return null;
}
finally
{
Factory.Close();
Factory.Abort();
}
我的服务类也有以下行为:
[ServiceBehavior(InstanceContextMode= InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Multiple, AutomaticSessionShutdown=true)]
我的服务 web.config 文件中还有以下内容:
<serviceBehaviors>
<behavior name="Server.Service1Behavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceThrottling maxConcurrentCalls="2147483647"
maxConcurrentSessions="2147483647"
maxConcurrentInstances="2147483647" />
我什么都试过了。请帮助我,因为用户不能这样工作。为什么在与数据库应用程序池的 102 个连接挂起后会发生这种情况? 这是调用数据库的代码
internal SqlConnection CheckIfConnectionOpen()
{
if (_Connection.State != ConnectionState.Open)
{
_Connection.Open();
}
return _Connection;
}
using (SqlCommand cmd = new SqlCommand(query, _Connection))
{
CheckIfConnectionOpen();
//some parameters for sqlcommand here and execute nonQuery or execute reader
}
有人可以帮我解决这个问题吗,因为我仍在寻找解决方案
【问题讨论】: