2010-03-02 6 views
1

인사말, 문제가 있습니다. IIS7에서 실행되는 WCF 서비스가 있습니다. 응용 프로그램이 응용 프로그램에 연결되고 WCF 서비스가 DB에 요청을합니다. SQL Server 2005의 활동 모니터에서 정확히 102 개의 활성 연결이 있고 IIS7의 응용 프로그램 풀이 중단 된 것을 알 수 있습니다. 이 후 내 WCF 서비스에 연결할 수 없습니다. 그런 다음 IIS7 만 다시 시작됩니다. 연결에 대해 ChannelFactory를 사용 중이며 요청이있을 때마다 닫힙니다. 나는 내 서비스 웹에서 다음 또한이IIS 7 응용 프로그램 풀 - WCF 서비스에 연결할 수 없습니다.

[ServiceBehavior(InstanceContextMode= InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Multiple, AutomaticSessionShutdown=true)] 

:

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이 : 나는 또한 채널이 닫혀 있는지 확인하기 위해이 같은 코드를 도입했습니다 .config 파일 :

<serviceBehaviors> 
<behavior name="Server.Service1Behavior"> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647"/> 

     <serviceThrottling maxConcurrentCalls="2147483647" 
     maxConcurrentSessions="2147483647" 
     maxConcurrentInstances="2147483647" /> 

나는 모든 것을 시도했다. 사용자가 이런 식으로 일할 수 없기 때문에 나를 도와주세요. 왜 DB 응용 프로그램 풀에 대한 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 
} 

나는 아직도 링크가 아래에 설명하는 장거리 슛에 솔루션

답변

1

에 대한 상황을 찾고 있기 때문에 사람이 나를 도와주세요 수있는 응용 프로그램 풀에 호출하는 코드입니다 충돌이 다시 시작되지 않습니다. 다시 시작할 수 있으면 문제의 심각도를 줄여야합니다.

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

귀하는이 DB 연결이 너무 닫혀 확인하는 것이 좋을 것입니다, 당신이 채널이 닫혀 체크 한 언급했다.

희망이 도움이됩니다.

+0

StartAutomatically가 이미 설정되었으며 최대 실패 횟수가 증가했습니다. 나는 도왔다. DB 연결이 닫혀 있는지 어떻게 확인할 수 있습니까? –

+0

글쎄 데이터 액세스 레이어에 따라 다릅니다. OR/M을 사용합니까? 아니면 SessionScope/TransationScope/DBConnection 객체를 직접 관리합니까? – Russell

+0

각 SessionScope/TransationScope/DBConnection 개체를 직접 관리합니다. 각 select 쿼리는 (SqlCommand sqlcmd = new SqlCommand (...))를 사용하여 다음 문장으로 시작하고 TransactionScope를 "using"으로 사용합니다. –

0

문제를 최소화하고 단일 프로세스에 덜 의존하는 웹 팜 (동일한 IIS에 대한 여러 프로세스)을 설정할 수 있습니다. 하나가 죽고 다시 시작하면 나머지는 포트를 유지할 수 있습니다 . 다시 시작할 때까지로

0

를 제외하고, 당신의 위의 코드는 동일합니다 :

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

그리고 그것은 그냥 나쁜 당신이 무슨 일이 있었는지 알 수 있도록 당신은 아마 어딘가에 예외를 기록 할

..

나는 th에서 호출하는 코드를보고 싶습니다. 전자 데이터베이스. 나는 당신이 제대로 정리하지 않을 수도 걱정.

+0

여기에 호출하는 코드가 있습니다. 데이터베이스 내부 SqlConnection CheckIfConnectionOpen() { if (_Connection.State! = ConnectionState.Open) { _Connection.Open(); } return _Connection; } 사용 (하는 SqlCommand cmd를 = 새로운하는 SqlCommand (쿼리, _Connection)) 여기 SqlCommand에 대한 { // 일부 매개 변수 // 및 nonQuery을 실행하거나 독자에게 } –

+0

을 실행하고 실제로 catch 코드 잡을하지 않습니다 모든 예외, 난 그냥 서버에서 null 응답을했습니다. –

관련 문제