J'ai le problème suivant :
J'ai programmé un service qui écoute sur un port les demandes des clients
et va chercher dans une base Sql les informations demandées.
Au démarrage de ce service, je me connecte à la base (tout ce qu'il y a de
plus classique).
Mais au bout de 2 ou trois jours, le service fonctionne toujours sauf qu'il
n'effectue plus les opérations sur la base.
Je me demandais si il etait possible qu'au bout d'un certain temps la
connection à la base
soit coupé et comment faire pour que mon service soit toujours en mesure de
consulter
la base ??? (j'aimerais éviter d'ouvrir et fermer la connection à chaque
demande ou de
faire un batch qui redémarre mon service toute les nuits.)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Sébastien Curutchet
Tu peux fermer et ouvrir des connexions à chaque fois. Normalement .NET gère un pool de connexions ainsi que SQLServer : si tu réouvres une connexion qui a été utilisée peu de temps avant, il reprend la même ; physiquement la connexion n'est pas fermée.
"MrChris" a écrit dans le message de news:
Salut !
J'ai le problème suivant : J'ai programmé un service qui écoute sur un port les demandes des clients et va chercher dans une base Sql les informations demandées.
Au démarrage de ce service, je me connecte à la base (tout ce qu'il y a de plus classique).
Mais au bout de 2 ou trois jours, le service fonctionne toujours sauf qu'il n'effectue plus les opérations sur la base.
Je me demandais si il etait possible qu'au bout d'un certain temps la connection à la base soit coupé et comment faire pour que mon service soit toujours en mesure de consulter la base ??? (j'aimerais éviter d'ouvrir et fermer la connection à chaque demande ou de faire un batch qui redémarre mon service toute les nuits.)
Merci pour vos lumières... MrChris
Tu peux fermer et ouvrir des connexions à chaque fois.
Normalement .NET gère un pool de connexions ainsi que SQLServer : si tu
réouvres une connexion qui a été utilisée peu de temps avant, il reprend la
même ; physiquement la connexion n'est pas fermée.
"MrChris" <mrchris@spam.com> a écrit dans le message de news:
O8tm91QhEHA.2916@TK2MSFTNGP12.phx.gbl...
Salut !
J'ai le problème suivant :
J'ai programmé un service qui écoute sur un port les demandes des clients
et va chercher dans une base Sql les informations demandées.
Au démarrage de ce service, je me connecte à la base (tout ce qu'il y a de
plus classique).
Mais au bout de 2 ou trois jours, le service fonctionne toujours sauf
qu'il
n'effectue plus les opérations sur la base.
Je me demandais si il etait possible qu'au bout d'un certain temps la
connection à la base
soit coupé et comment faire pour que mon service soit toujours en mesure
de consulter
la base ??? (j'aimerais éviter d'ouvrir et fermer la connection à chaque
demande ou de
faire un batch qui redémarre mon service toute les nuits.)
Tu peux fermer et ouvrir des connexions à chaque fois. Normalement .NET gère un pool de connexions ainsi que SQLServer : si tu réouvres une connexion qui a été utilisée peu de temps avant, il reprend la même ; physiquement la connexion n'est pas fermée.
"MrChris" a écrit dans le message de news:
Salut !
J'ai le problème suivant : J'ai programmé un service qui écoute sur un port les demandes des clients et va chercher dans une base Sql les informations demandées.
Au démarrage de ce service, je me connecte à la base (tout ce qu'il y a de plus classique).
Mais au bout de 2 ou trois jours, le service fonctionne toujours sauf qu'il n'effectue plus les opérations sur la base.
Je me demandais si il etait possible qu'au bout d'un certain temps la connection à la base soit coupé et comment faire pour que mon service soit toujours en mesure de consulter la base ??? (j'aimerais éviter d'ouvrir et fermer la connection à chaque demande ou de faire un batch qui redémarre mon service toute les nuits.)
Merci pour vos lumières... MrChris
MrChris
Dans ce cas c'est cool ! Mais j'ai peur des performances, chaque clique sur un des bouton du client remplis une listview d'une centaines d'éléments qu'il va chercher dans la base, et fois quarante utilisateurs... Je ne sais pas trop comment faire pour optimiser la chose. J'ai pensé à un dataset en mémoire pour le service et faire des transactions avec la base, mais comme il y a beaucoup de mise à jour, je me vois mal faire des mises à jours toutes les 5 minutes... Surtout si ca plante avant la mise à jour, je perd les dernières 5 minutes...
C'est un casse tête... Mais je vais changer le code pour ouvrir et fermer la connection à chaque fois. J'ai en moyenne une dizaine d'accès à la base par minute dans la journée, ce qui maintient la connection, mais la nuit plus rien !
Merci pour ta réponse ! MrChris
Dans ce cas c'est cool !
Mais j'ai peur des performances, chaque clique sur un des bouton
du client remplis une listview d'une centaines d'éléments qu'il va chercher
dans la base, et fois quarante utilisateurs...
Je ne sais pas trop comment faire pour optimiser la chose.
J'ai pensé à un dataset en mémoire pour le service et faire
des transactions avec la base, mais comme il y a beaucoup de mise
à jour, je me vois mal faire des mises à jours toutes les 5 minutes...
Surtout si ca plante avant la mise à jour, je perd les dernières 5
minutes...
C'est un casse tête...
Mais je vais changer le code pour ouvrir et fermer la connection à chaque
fois.
J'ai en moyenne une dizaine d'accès à la base par minute dans la journée, ce
qui
maintient la connection, mais la nuit plus rien !
Dans ce cas c'est cool ! Mais j'ai peur des performances, chaque clique sur un des bouton du client remplis une listview d'une centaines d'éléments qu'il va chercher dans la base, et fois quarante utilisateurs... Je ne sais pas trop comment faire pour optimiser la chose. J'ai pensé à un dataset en mémoire pour le service et faire des transactions avec la base, mais comme il y a beaucoup de mise à jour, je me vois mal faire des mises à jours toutes les 5 minutes... Surtout si ca plante avant la mise à jour, je perd les dernières 5 minutes...
C'est un casse tête... Mais je vais changer le code pour ouvrir et fermer la connection à chaque fois. J'ai en moyenne une dizaine d'accès à la base par minute dans la journée, ce qui maintient la connection, mais la nuit plus rien !
Merci pour ta réponse ! MrChris
Quentin Pouplard
MrChris wrote:
C'est un casse tête... Mais je vais changer le code pour ouvrir et fermer la connection à chaque fois.
C'est même conseillé de fonctionner comme cela en .NET... avec ADO.NET on est passé dans un mode disconnected. (ce qui explique la présence d'un pool de connex et le fonctionnement des dataset). Dans l'ensemble c'est plutôt une bonne nouvelle ;)
C'est un casse tête...
Mais je vais changer le code pour ouvrir et fermer la connection à
chaque fois.
C'est même conseillé de fonctionner comme cela en .NET... avec ADO.NET
on est passé dans un mode disconnected. (ce qui explique la présence
d'un pool de connex et le fonctionnement des dataset). Dans l'ensemble
c'est plutôt une bonne nouvelle ;)
C'est un casse tête... Mais je vais changer le code pour ouvrir et fermer la connection à chaque fois.
C'est même conseillé de fonctionner comme cela en .NET... avec ADO.NET on est passé dans un mode disconnected. (ce qui explique la présence d'un pool de connex et le fonctionnement des dataset). Dans l'ensemble c'est plutôt une bonne nouvelle ;)
Justement l'objectif du pool est de réduire les temps de création/destruction des connexions...
Esaie une simple simulation de charge et vois le temps que tu passes à créer des connexions. Tu verras qu'il est tout à fait minime (compare éventuellement avec ce que cela donne lorsque le pool n'est pas activé).
Patrice --
"MrChris" a écrit dans le message de news:
Dans ce cas c'est cool ! Mais j'ai peur des performances, chaque clique sur un des bouton du client remplis une listview d'une centaines d'éléments qu'il va
chercher
dans la base, et fois quarante utilisateurs... Je ne sais pas trop comment faire pour optimiser la chose. J'ai pensé à un dataset en mémoire pour le service et faire des transactions avec la base, mais comme il y a beaucoup de mise à jour, je me vois mal faire des mises à jours toutes les 5 minutes... Surtout si ca plante avant la mise à jour, je perd les dernières 5 minutes...
C'est un casse tête... Mais je vais changer le code pour ouvrir et fermer la connection à chaque fois. J'ai en moyenne une dizaine d'accès à la base par minute dans la journée,
ce
qui maintient la connection, mais la nuit plus rien !
Merci pour ta réponse ! MrChris
Justement l'objectif du pool est de réduire les temps de
création/destruction des connexions...
Esaie une simple simulation de charge et vois le temps que tu passes à créer
des connexions. Tu verras qu'il est tout à fait minime (compare
éventuellement avec ce que cela donne lorsque le pool n'est pas activé).
Patrice
--
"MrChris" <mrchris@spam.com> a écrit dans le message de
news:OfuHq9RhEHA.1644@tk2msftngp13.phx.gbl...
Dans ce cas c'est cool !
Mais j'ai peur des performances, chaque clique sur un des bouton
du client remplis une listview d'une centaines d'éléments qu'il va
chercher
dans la base, et fois quarante utilisateurs...
Je ne sais pas trop comment faire pour optimiser la chose.
J'ai pensé à un dataset en mémoire pour le service et faire
des transactions avec la base, mais comme il y a beaucoup de mise
à jour, je me vois mal faire des mises à jours toutes les 5 minutes...
Surtout si ca plante avant la mise à jour, je perd les dernières 5
minutes...
C'est un casse tête...
Mais je vais changer le code pour ouvrir et fermer la connection à chaque
fois.
J'ai en moyenne une dizaine d'accès à la base par minute dans la journée,
ce
qui
maintient la connection, mais la nuit plus rien !
Justement l'objectif du pool est de réduire les temps de création/destruction des connexions...
Esaie une simple simulation de charge et vois le temps que tu passes à créer des connexions. Tu verras qu'il est tout à fait minime (compare éventuellement avec ce que cela donne lorsque le pool n'est pas activé).
Patrice --
"MrChris" a écrit dans le message de news:
Dans ce cas c'est cool ! Mais j'ai peur des performances, chaque clique sur un des bouton du client remplis une listview d'une centaines d'éléments qu'il va
chercher
dans la base, et fois quarante utilisateurs... Je ne sais pas trop comment faire pour optimiser la chose. J'ai pensé à un dataset en mémoire pour le service et faire des transactions avec la base, mais comme il y a beaucoup de mise à jour, je me vois mal faire des mises à jours toutes les 5 minutes... Surtout si ca plante avant la mise à jour, je perd les dernières 5 minutes...
C'est un casse tête... Mais je vais changer le code pour ouvrir et fermer la connection à chaque fois. J'ai en moyenne une dizaine d'accès à la base par minute dans la journée,
ce
qui maintient la connection, mais la nuit plus rien !
Merci pour ta réponse ! MrChris
Bonjour,
l'utilisation d'un dataset peut pénaliser les temps de réponse aussi un dataset se charge en mémoire et stocke toute les modification qui sont faites dessus pour ensuite mettre à jour la base. Si votre service n'a pas pour objectif de faire une mise à jour de la base alors il vaut mieu utiliser des dataview par exemple ou des datareader qui iront beaucoup plus vite qu'un dataset.
Sebastien "MrChris" a écrit dans le message de news:
Dans ce cas c'est cool ! Mais j'ai peur des performances, chaque clique sur un des bouton du client remplis une listview d'une centaines d'éléments qu'il va
chercher
dans la base, et fois quarante utilisateurs... Je ne sais pas trop comment faire pour optimiser la chose. J'ai pensé à un dataset en mémoire pour le service et faire des transactions avec la base, mais comme il y a beaucoup de mise à jour, je me vois mal faire des mises à jours toutes les 5 minutes... Surtout si ca plante avant la mise à jour, je perd les dernières 5 minutes...
C'est un casse tête... Mais je vais changer le code pour ouvrir et fermer la connection à chaque fois. J'ai en moyenne une dizaine d'accès à la base par minute dans la journée,
ce
qui maintient la connection, mais la nuit plus rien !
Merci pour ta réponse ! MrChris
Bonjour,
l'utilisation d'un dataset peut pénaliser les temps de réponse aussi un
dataset se charge en mémoire et stocke toute les modification qui sont
faites dessus pour ensuite mettre à jour la base. Si votre service n'a pas
pour objectif de faire une mise à jour de la base alors il vaut mieu
utiliser des dataview par exemple ou des datareader qui iront beaucoup plus
vite qu'un dataset.
Sebastien
"MrChris" <mrchris@spam.com> a écrit dans le message de
news:OfuHq9RhEHA.1644@tk2msftngp13.phx.gbl...
Dans ce cas c'est cool !
Mais j'ai peur des performances, chaque clique sur un des bouton
du client remplis une listview d'une centaines d'éléments qu'il va
chercher
dans la base, et fois quarante utilisateurs...
Je ne sais pas trop comment faire pour optimiser la chose.
J'ai pensé à un dataset en mémoire pour le service et faire
des transactions avec la base, mais comme il y a beaucoup de mise
à jour, je me vois mal faire des mises à jours toutes les 5 minutes...
Surtout si ca plante avant la mise à jour, je perd les dernières 5
minutes...
C'est un casse tête...
Mais je vais changer le code pour ouvrir et fermer la connection à chaque
fois.
J'ai en moyenne une dizaine d'accès à la base par minute dans la journée,
ce
qui
maintient la connection, mais la nuit plus rien !
l'utilisation d'un dataset peut pénaliser les temps de réponse aussi un dataset se charge en mémoire et stocke toute les modification qui sont faites dessus pour ensuite mettre à jour la base. Si votre service n'a pas pour objectif de faire une mise à jour de la base alors il vaut mieu utiliser des dataview par exemple ou des datareader qui iront beaucoup plus vite qu'un dataset.
Sebastien "MrChris" a écrit dans le message de news:
Dans ce cas c'est cool ! Mais j'ai peur des performances, chaque clique sur un des bouton du client remplis une listview d'une centaines d'éléments qu'il va
chercher
dans la base, et fois quarante utilisateurs... Je ne sais pas trop comment faire pour optimiser la chose. J'ai pensé à un dataset en mémoire pour le service et faire des transactions avec la base, mais comme il y a beaucoup de mise à jour, je me vois mal faire des mises à jours toutes les 5 minutes... Surtout si ca plante avant la mise à jour, je perd les dernières 5 minutes...
C'est un casse tête... Mais je vais changer le code pour ouvrir et fermer la connection à chaque fois. J'ai en moyenne une dizaine d'accès à la base par minute dans la journée,
ce
qui maintient la connection, mais la nuit plus rien !
Merci pour ta réponse ! MrChris
MrChris
Comme dit précédamment, j'ai une dizaine de mise à jour par minutes...
Mais ce qui m'inquiète avec le dataset, c'est dans le cas de transaction avec la base, si le service plante, je perd les modifs.
Je peux faire un commit de la transaction toutes les 5 minutes, mais dans ce cas je retombe sur mon problème d'un grand nombre d'accès à la base par unité de temps.
Mais je me tourne vers Procédure stocké et ouverture d'une connection à chaque demande, je vais faire confiance au pool de connection comme suggéré dans les posts précédents
Merci pour ta réponse ! MrChris
Comme dit précédamment, j'ai une dizaine de mise à jour par minutes...
Mais ce qui m'inquiète avec le dataset, c'est dans le cas de transaction
avec la base, si le service
plante, je perd les modifs.
Je peux faire un commit de la transaction toutes les 5 minutes, mais dans ce
cas je retombe
sur mon problème d'un grand nombre d'accès à la base par unité de temps.
Mais je me tourne vers Procédure stocké et ouverture d'une connection à
chaque
demande, je vais faire confiance au pool de connection comme suggéré dans
les
posts précédents
Comme dit précédamment, j'ai une dizaine de mise à jour par minutes...
Mais ce qui m'inquiète avec le dataset, c'est dans le cas de transaction avec la base, si le service plante, je perd les modifs.
Je peux faire un commit de la transaction toutes les 5 minutes, mais dans ce cas je retombe sur mon problème d'un grand nombre d'accès à la base par unité de temps.
Mais je me tourne vers Procédure stocké et ouverture d'une connection à chaque demande, je vais faire confiance au pool de connection comme suggéré dans les posts précédents
Merci pour ta réponse ! MrChris
de rien pour la réponse elle a pas du aider beaucoup ;)
cela dit tu sais qu'au niveau des sqldataadapter tu peux gérer des transactions donc place le update dans une transaction est en cas de plantage envoi le dataset dans un fichier sur le disque dur tu pourra le recharger et le réinjecter ensuite sans problème un peu comme le journal sql server par contre pense a ne pas faire de dataset.acceptchanges() temps qu'il a pas été repassé c'est une idée si elle peut t'aider à gérer les plantages ;)
De toute façon si tu utilise un provider spécialement développé pour ta base (comme sqldataadapter par ex pour sql server) il est sensé être complétement optimisé il n'y aura pas grand chose à gratter je pense .
Sebastien "MrChris" a écrit dans le message de news:
Comme dit précédamment, j'ai une dizaine de mise à jour par minutes...
Mais ce qui m'inquiète avec le dataset, c'est dans le cas de transaction avec la base, si le service plante, je perd les modifs.
Je peux faire un commit de la transaction toutes les 5 minutes, mais dans
ce
cas je retombe sur mon problème d'un grand nombre d'accès à la base par unité de temps.
Mais je me tourne vers Procédure stocké et ouverture d'une connection à chaque demande, je vais faire confiance au pool de connection comme suggéré dans les posts précédents
Merci pour ta réponse ! MrChris
de rien pour la réponse elle a pas du aider beaucoup ;)
cela dit tu sais qu'au niveau des sqldataadapter tu peux gérer des
transactions donc place le update dans une transaction est en cas de
plantage envoi le dataset dans un fichier sur le disque dur tu pourra le
recharger et le réinjecter ensuite sans problème un peu comme le journal sql
server par contre pense a ne pas faire de dataset.acceptchanges() temps
qu'il a pas été repassé c'est une idée si elle peut t'aider à gérer les
plantages ;)
De toute façon si tu utilise un provider spécialement développé pour ta base
(comme sqldataadapter par ex pour sql server) il est sensé être complétement
optimisé il n'y aura pas grand chose à gratter je pense .
Sebastien
"MrChris" <mrchris@spam.com> a écrit dans le message de
news:eigaGqdhEHA.3612@TK2MSFTNGP12.phx.gbl...
Comme dit précédamment, j'ai une dizaine de mise à jour par minutes...
Mais ce qui m'inquiète avec le dataset, c'est dans le cas de transaction
avec la base, si le service
plante, je perd les modifs.
Je peux faire un commit de la transaction toutes les 5 minutes, mais dans
ce
cas je retombe
sur mon problème d'un grand nombre d'accès à la base par unité de temps.
Mais je me tourne vers Procédure stocké et ouverture d'une connection à
chaque
demande, je vais faire confiance au pool de connection comme suggéré dans
les
posts précédents
de rien pour la réponse elle a pas du aider beaucoup ;)
cela dit tu sais qu'au niveau des sqldataadapter tu peux gérer des transactions donc place le update dans une transaction est en cas de plantage envoi le dataset dans un fichier sur le disque dur tu pourra le recharger et le réinjecter ensuite sans problème un peu comme le journal sql server par contre pense a ne pas faire de dataset.acceptchanges() temps qu'il a pas été repassé c'est une idée si elle peut t'aider à gérer les plantages ;)
De toute façon si tu utilise un provider spécialement développé pour ta base (comme sqldataadapter par ex pour sql server) il est sensé être complétement optimisé il n'y aura pas grand chose à gratter je pense .
Sebastien "MrChris" a écrit dans le message de news:
Comme dit précédamment, j'ai une dizaine de mise à jour par minutes...
Mais ce qui m'inquiète avec le dataset, c'est dans le cas de transaction avec la base, si le service plante, je perd les modifs.
Je peux faire un commit de la transaction toutes les 5 minutes, mais dans
ce
cas je retombe sur mon problème d'un grand nombre d'accès à la base par unité de temps.
Mais je me tourne vers Procédure stocké et ouverture d'une connection à chaque demande, je vais faire confiance au pool de connection comme suggéré dans les posts précédents