IIS 7应用程序池 - 无法连接到WCF服务

时间:2010-03-02 23:40:31

标签: wcf iis-7

问候, 我必须遵循问题。我有一个在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();
}

我的服务类还有以下behvavior:

[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
}

有人可以帮助我,因为我仍在寻找解决方案

3 个答案:

答案 0 :(得分:1)

从长远来看,下面的链接说明了应用程序池崩溃但未重启的情况。如果您可以重新启动它,则应该降低问题的严重性。

http://i.nconspicuo.us/2008/06/25/iis7-on-windows-server-2008-503-service-unavailable-error-application-pool-stops-unexpectedly/

您提到您已检查通道已关闭,最好确认数据库连接也已关闭。

希望这有帮助!

答案 1 :(得分:0)

您可以设置一个Web场(同一个IIS的多个进程),这将有助于最大限度地减少问题,并且更少依赖于单个进程(如果一个死亡并重新启动,其他人可以在那里支撑堡垒直到它重新启动。

答案 2 :(得分:0)

顺便说一下,上面的代码相当于:

catch (Exception ex)
{
    Factory.Abort();
    return null;
}
finally
{
    Factory.Close();
    Factory.Abort();
}

而且同样糟糕。您可能希望在某处记录异常,以便了解发生了什么。

我想看看调用数据库的代码。我担心你可能没有正确清理。