WebService C# avec connexion SQL Server

mesdevs Messages postés 8 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 7 septembre 2007 - 30 janv. 2006 à 16:08
nasasup Messages postés 4 Date d'inscription dimanche 31 décembre 2000 Statut Membre Dernière intervention 10 mai 2010 - 31 mars 2010 à 20:09
Bonjour,



J'ai un problème lorsque je demande à un WebService d'accéder à une BD
SQL Server : la connexion marche, mais, la connexion ne se ferme jamais
sauf si je recompile le WebService ou que je tue la process oracle
directement dans 'Activity Monitor du Management Studio'.



En dev : Studio 2005, C#, SQL Server 2005, SQL Server Management Studio Express (Activity Monitor)

WebService : Sous Visual Studio 2005, C# (le WebService est sur un serveur)

Appli Cliente : Sous Visual Studio 2005, C# (sur un poste client relié au serveur via un VPN)

Mon niveau : débutant



Mon WebService :

using System;

using System.Collections;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Data;

using System.Data.Sql;

using System.Data.SqlClient;



[WebService(Description= "TEST",Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class TEST_WS : System.Web.Services.WebService

{

public TEST_WS()

{

}

[WebMethod]

public void Initialisation()

{

SqlConnection oMaConnexionBD =null;

SqlDataReader oReader=null;



string sID_Ress="";

string sSQL="";



oMaConnexionBD = new SqlConnection();

oMaConnexionBD.ConnectionString = "Data Source=.........";



oMaConnexionBD.Open();

oMaConnexionBD.Close();

oMaConnexionBD = null;

}

}



Mon Appli Cliente :

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;



namespace WindowsApplication3

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}



private void button1_Click(object sender, EventArgs e)

{

WebReference.TEST_WS MonWS = new WebReference.TEST_WS();

MonWS.Initialisation();

MonWS.Dispose();

MonWS = null;



}

}

}



Donc comme je l'ai expliqué, la connexion avec la BD se fait mais elle
n'est jamais libérée !! même lorsque je quitte l'appli cliente !



Quelqu'un peut-il m'aider SVP ?

Merci.

6 réponses

mesdevs Messages postés 8 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 7 septembre 2007
30 janv. 2006 à 16:14
il s'agit bien de SQL Server et non pas d'Oracle comme je l'ai mis ! (faute de frappe)
0
mesdevs Messages postés 8 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 7 septembre 2007
31 janv. 2006 à 09:02
pou info, le process (visible dans 'SQL Server Activity Monitor') est :

- Status : sleeping

- Command : AWAITING COMMAND

- Application : .Net SqlClient Data Provider

- Open Transactions : 0

- CPU : 0

- Physical IO : 0

- Memory Usage : 2
0
mesdevs Messages postés 8 Date d'inscription vendredi 6 février 2004 Statut Membre Dernière intervention 7 septembre 2007
1 févr. 2006 à 08:55
Bon, puisque personne ne veut me répondre, je me réponds tout seul (si ça peut aider d'autres personnes):

En fait, il suffit d'utiliser un pool de connexion :



MaConnexionBD.ConnectionString = "Data Source=.........;pooling=false;";
0
lhtalent Messages postés 1 Date d'inscription lundi 19 juin 2006 Statut Membre Dernière intervention 13 juillet 2006
13 juil. 2006 à 16:13
Au fait "pooling = false" n'est pas une solution très propore. Si tu regarde le coté SQL Server, il va créer une SP chaque fois quand le webservice est appelé, même si c'est avec le même utilisateur. En mettant pooling = false désactive le limite sur le nombre max de SP. Du coup tu trouvera facilement 1000 SP sleeping sur un service de production.

Donc gardez pooling = true, avec le même sqlConnection normalement il doit pas créer des nouveaux SP. L'importance c'est de créer un seul SqlConnection dans ton programme. Au lieu de créer le SqlConnection dans le webméthode, tu peux le déclarer et définir son ConnectionString dans InitializeComponent() de webservice.

En conclus, un SP pour chaque SqlConnection. Pour éviter dépasser le max de pooling SP, il faut utiliser toujours le même objet SqlConnection (non seulement le même SqlConnection.ConnectionString)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_denisc Messages postés 1 Date d'inscription mardi 29 avril 2003 Statut Membre Dernière intervention 5 septembre 2006
5 sept. 2006 à 11:37
Merci pour le tuyau (pooling)

Quelqu'un a-t-il une classe d'accès à SQLServer 2005 permettant de ne travailler qu'avec une seule SQLConnection?
J'ai fait le tour ici, et toutes créent un objet à chaque requête :(

Merci de faire signe ;)
0
nasasup Messages postés 4 Date d'inscription dimanche 31 décembre 2000 Statut Membre Dernière intervention 10 mai 2010
31 mars 2010 à 20:09
je travaille par asp.net et j'aimerai savoir la connexion avec base donnée est ce que ce fait avec le web service puis la couche présentation communique avec le web service si oui comment ?

dans J2EE on parle de MVC1 et MVC2 et pour .net on parle de quoi ?

merci d'avance pour vous réponse
0
Rejoignez-nous