Salutations, Je dois suivre le problème suivant. J'ai un service WCF qui fonctionne sous IIS7. L'application s'y connecte et le service WCF envoie des requêtes à la base de données. J'ai remarqué dans le moniteur d'activité dans SQL Server 2005 qu'après qu'il y a exactement 102 connexions actives, le pool d'applications dans IIS7 se bloque. Après cela, je ne peux pas me connecter à mon service WCF. Alors seulement IIS7 redémarre aide. Pour la connexion j'utilise ChannelFactory, il est fermé après chaque requête. Je l'ai également introduit un code comme celui-ci pour être sûr que canal est fermé:IIS 7 Pool d'applications - Impossible de se connecter au service WCF
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();
}
J'ai aussi la behvavior suivante pour ma classe de service:
[ServiceBehavior(InstanceContextMode= InstanceContextMode.Single, ConcurrencyMode=ConcurrencyMode.Multiple, AutomaticSessionShutdown=true)]
J'ai aussi ce qui suit dans mon service web .config fichier:
<serviceBehaviors>
<behavior name="Server.Service1Behavior">
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
<serviceThrottling maxConcurrentCalls="2147483647"
maxConcurrentSessions="2147483647"
maxConcurrentInstances="2147483647" />
J'ai tout essayé. S'il vous plaît aidez-moi parce que l'utilisateur ne peut pas travailler comme ça. Pourquoi est-ce qu'après 102 connexions au pool d'applications DB se bloque? Voici le code qui appelle la base de données
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
}
Quelqu'un peut-il s'il vous plaît me aider parce que je suis toujours à la recherche d'une solution
J'ai déjà défini StartAutomatically et augmenté le nombre maximum de défaillances. Je n'ai pas aidé. Comment puis-je vérifier si la connexion DB a été fermée? –
Eh bien cela dépend de votre couche d'accès aux données. Utilisez-vous un OR/M ou vous gérez vous-même les objets SessionScope/TransationScope/DBConnection? – Russell
Je gère les objets SessionScope/TransationScope/DBConnection moi-même, chaque requête select commence par l'instruction suivante en utilisant (SqlCommand sqlcmd = new SqlCommand (...)), j'ai aussi TransactionScope en "using" –